home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / asxsrc.arc / ASMLNK.DOC < prev    next >
Text File  |  1989-08-25  |  139KB  |  4,052 lines

  1.  
  2.  
  3.          
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.                                 ASxxxx Assemblers
  30.  
  31.  
  32.                                        and
  33.  
  34.  
  35.                             ASLINK Relocating Linker
  36. CHAPTER 1  THE ASSEMBLER                                 1-1 
  37.   1.1     THE ASXXXX ASSEMBLERS                          1-1 
  38.   1.1.1     Assembly Pass 1                              1-2 
  39.   1.1.2     Assembly Pass 2                              1-2 
  40.   1.1.3     Assembly Pass 3                              1-2 
  41.   1.2     SOURCE PROGRAM FORMAT                          1-3 
  42.   1.2.1     Statement Format                             1-3 
  43.   1.2.1.1     Label Field                                1-3 
  44.   1.2.1.2     Operator Field                             1-5 
  45.   1.2.1.3     Operand Field                              1-5 
  46.   1.2.1.4     Comment Field                              1-6 
  47.   1.3     SYMBOLS AND EXPRESSIONS                        1-6 
  48.   1.3.1     Character Set                                1-6 
  49.   1.3.2     User-Defined Symbols                        1-10 
  50.   1.3.3     Local Symbols                               1-11 
  51.   1.3.4     Current Location Counter                    1-12 
  52.   1.3.5     Numbers                                     1-14 
  53.   1.3.6     Terms                                       1-14 
  54.   1.3.7     Expressions                                 1-15 
  55.   1.4     GENERAL ASSEMBLER DIRECTIVES                  1-16 
  56.   1.4.1     .module Directive                           1-16 
  57.   1.4.2     .title Directive                            1-17 
  58.   1.4.3     .sbttl Directive                            1-17 
  59.   1.4.4     .page Directive                             1-17 
  60.   1.4.5     .byte and .db Directives                    1-17 
  61.   1.4.6     .word and .dw Directives                    1-18 
  62.   1.4.7     .blkb, .blkw, and .ds Directives            1-18 
  63.   1.4.8     .ascii Directive                            1-18 
  64.   1.4.9     .asciz Directive                            1-19 
  65.   1.4.10    .radix Directive                            1-19 
  66.   1.4.11    .even Directive                             1-20 
  67.   1.4.12    .odd Directive                              1-20 
  68.   1.4.13    .area Directive                             1-20 
  69.   1.4.14    .org Directive                              1-21 
  70.   1.4.15    .globl Directive                            1-22 
  71.   1.4.16    .if, .else, and .endif Directives           1-22 
  72.   1.4.17    .include Directive                          1-23 
  73.   1.5     INVOKING ASXXXX                               1-24 
  74.   1.6     ERRORS                                        1-25 
  75.   1.7     LISTING FILE                                  1-26 
  76.   1.8     SYMBOL TABLE FILE                             1-27 
  77.   1.9     OBJECT FILE                                   1-28 
  78.  
  79. CHAPTER 2  THE LINKER                                    2-1 
  80.   2.1     ASLINK RELOCATING LINKER                       2-1 
  81.   2.2     INVOKING ASLINK                                2-2 
  82.   2.3     ASLINK PROCESSING                              2-3 
  83.   2.4     LINKER INPUT FORMAT                            2-4 
  84.   2.4.1     Object Module Format                         2-4 
  85.   2.4.2     Header Line                                  2-5 
  86.   2.4.3     Module Line                                  2-5 
  87.   2.4.4     Symbol Line                                  2-5 
  88.   2.4.5     Area Line                                    2-5 
  89.   2.4.6     T Line                                       2-6 
  90.   2.4.7     R Line                                       2-6 
  91.  
  92. CHAPTER 3  BUILDING ASXXXX AND ASLINK                    3-1 
  93.   3.1     BUILDING AN ASSEMBLER                          3-1 
  94.                                                      Page ii
  95.  
  96.  
  97.  
  98.   3.2     BUILDING ASLINK                                3-2 
  99.  
  100. APPENDIX A  AS6800 ASSEMBLER                             A-1 
  101.   A.1     .setdp DIRECTIVE                               A-1 
  102.   A.2     6800 REGISTER SET                              A-1 
  103.   A.3     6800 INSTRUCTION SET                           A-2 
  104.   A.3.1     Inherent Instructions                        A-3 
  105.   A.3.2     Branch Instructions                          A-3 
  106.   A.3.3     Single Operand Instructions                  A-4 
  107.   A.3.4     Double Operand Instructions                  A-5 
  108.   A.3.5     Jump and Jump to Subroutine Instructions     A-5 
  109.   A.3.6     Long Register Instructions                   A-6 
  110.  
  111. APPENDIX B  AS6801 ASSEMBLER                             B-1 
  112.   B.1     .setdp DIRECTIVE                               B-1 
  113.   B.2     .hd6303 DIRECTIVE                              B-1 
  114.   B.3     6801 REGISTER SET                              B-2 
  115.   B.4     6801 INSTRUCTION SET                           B-2 
  116.   B.4.1     Inherent Instructions                        B-3 
  117.   B.4.2     Branch Instructions                          B-3 
  118.   B.4.3     Single Operand Instructions                  B-3 
  119.   B.4.4     Double Operand Instructions                  B-5 
  120.   B.4.5     Jump and Jump to Subroutine Instructions     B-5 
  121.   B.4.6     Long Register Instructions                   B-5 
  122.   B.4.7     6303 Specific Instructions                   B-6 
  123.  
  124. APPENDIX C  AS6804 ASSEMBLER                             C-1 
  125.   C.1     6804 REGISTER SET                              C-1 
  126.   C.2     6804 INSTRUCTION SET                           C-1 
  127.   C.2.1     Inherent Instructions                        C-2 
  128.   C.2.2     Branch Instructions                          C-2 
  129.   C.2.3     Single Operand Instructions                  C-2 
  130.   C.2.4     Jump and Jump to Subroutine Instructions     C-2 
  131.   C.2.5     Bit Test Instructions                        C-2 
  132.   C.2.6     Load Immediate data Instruction              C-3 
  133.   C.2.7     6804 Derived Instructions                    C-3 
  134.  
  135. APPENDIX D  AS6805 ASSEMBLER                             D-1 
  136.   D.1     .setdp DIRECTIVE                               D-1 
  137.   D.2     6805 REGISTER SET                              D-1 
  138.   D.3     6805 INSTRUCTION SET                           D-2 
  139.   D.3.1     Control Instructions                         D-2 
  140.   D.3.2     Bit Manipulation Instructions                D-3 
  141.   D.3.3     Branch Instructions                          D-3 
  142.   D.3.4     Read-Modify-Write Instructions               D-4 
  143.   D.3.5     Register\Memory Instructions                 D-4 
  144.   D.3.6     Jump and Jump to Subroutine Instructions     D-5 
  145.  
  146. APPENDIX E  AS6809 ASSEMBLER                             E-1 
  147.   E.1     .setdp DIRECTIVE                               E-1 
  148.   E.2     6809 REGISTER SET                              E-1 
  149.   E.3     6809 INSTRUCTION SET                           E-2 
  150.   E.3.1     Inherent Instructions                        E-4 
  151.   E.3.2     Short Branch Instructions                    E-4 
  152.                                                     Page iii
  153.  
  154.  
  155.  
  156.   E.3.3     Long Branch Instructions                     E-4 
  157.   E.3.4     Single Operand Instructions                  E-5 
  158.   E.3.5     Double Operand Instructions                  E-6 
  159.   E.3.6     D-register Instructions                      E-6 
  160.   E.3.7     Index/Stack Register Instructions            E-6 
  161.   E.3.8     Jump and Jump to Subroutine Instructions     E-7 
  162.   E.3.9     Register - Register Instructions             E-7 
  163.   E.3.10    Condition Code Register Instructions         E-7 
  164.   E.3.11    6800 Compatibility Instructions              E-7 
  165.  
  166. APPENDIX F  AS6811 ASSEMBLER                             F-1 
  167.   F.1     .setdp DIRECTIVE                               F-1 
  168.   F.2     6811 REGISTER SET                              F-1 
  169.   F.3     6811 INSTRUCTION SET                           F-2 
  170.   F.3.1     Inherent Instructions                        F-3 
  171.   F.3.2     Branch Instructions                          F-3 
  172.   F.3.3     Single Operand Instructions                  F-4 
  173.   F.3.4     Double Operand Instructions                  F-5 
  174.   F.3.5     Bit Manupulation Instructions                F-5 
  175.   F.3.6     Jump and Jump to Subroutine Instructions     F-6 
  176.   F.3.7     Long Register Instructions                   F-6 
  177.  
  178. APPENDIX G  AS8085 ASSEMBLER                             G-1 
  179.   G.1     8085 REGISTER SET                              G-1 
  180.   G.2     8085 INSTRUCTION SET                           G-1 
  181.   G.2.1     Inherent Instructions                        G-2 
  182.   G.2.2     Register/Memory/Immediate Instructions       G-2 
  183.   G.2.3     Call and Return Instructions                 G-2 
  184.   G.2.4     Jump Instructions                            G-2 
  185.   G.2.5     Input/Output/Reset Instructions              G-3 
  186.   G.2.6     Move Instructions                            G-3 
  187.   G.2.7     Other Instructions                           G-3 
  188.  
  189. APPENDIX H  ASZ80 ASSEMBLER                              H-1 
  190.   H.1     .hd64 DIRECTIVE                                H-1 
  191.   H.2     Z80 REGISTER SET AND CONDITIONS                H-1 
  192.   H.3     Z80 INSTRUCTION SET                            H-2 
  193.   H.3.1     Inherent Instructions                        H-3 
  194.   H.3.2     Implicit Operand Instructions                H-3 
  195.   H.3.3     Load Instruction                             H-4 
  196.   H.3.4     Call/Return Instructions                     H-4 
  197.   H.3.5     Jump and Jump to Subroutine Instructions     H-4 
  198.   H.3.6     Bit Manipulation Instructions                H-5 
  199.   H.3.7     Interrupt Mode and Reset Instructions        H-5 
  200.   H.3.8     Input and Output Instructions                H-5 
  201.   H.3.9     Register Pair Instructions                   H-5 
  202.   H.3.10    HD64180 Specific Instructions                H-6 
  203.  
  204.  
  205.                                                                  Page iv
  206.         
  207.  
  208.  
  209.          
  210.  
  211.  
  212.  
  213.  
  214.  
  215.                                   P R E F A C E
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.            The  ASxxxx  assemblers  were  written following the style of
  223.         several cross assemblers found in the Digital Equipment Corpora-
  224.         tion  Users  Society  (DECUS)  distribution of the C programming
  225.         language.  The DECUS code was provided with no documentation  as
  226.         to  the  input  syntax  or the output format.  Study of the code
  227.         revealed that the unknown author of the code  had  attempted  to
  228.         formulate  an assembler with attributes similiar to those of the
  229.         PDP-11 MACRO assembler (without macro's).  The  incomplete  code
  230.         from  the  DECUS C distribution has been largely rewritten, only
  231.         the program structure, and C source  file  organization  remains
  232.         relatively  unchanged.   However, I wish to thank the author for
  233.         his contribution to this set of assemblers.  
  234.  
  235.            The  ASLINK  program was written as a companion to the ASxxxx
  236.         assemblers, its design and implementation was not  derived  from
  237.         any other work.  
  238.  
  239.            The  ASxxxx  assemblers  and the ASLINK relocating linker are
  240.         placed in the Public Domain.   Publication  or  distribution  of
  241.         these programs for non-commercial use is hereby granted with the
  242.         stipulation that the  copyright  notice  be  included  with  all
  243.         copies.  
  244.  
  245.            I  would  greatly  appreciate  receiving  the  details of any
  246.         changes, additions, or errors pertaining to these  programs  and
  247.         will  attempt  to  incorporate  any  fixes  or  generally useful
  248.         changes in a future update to these programs.  
  249.  
  250.  
  251.  
  252.  
  253.                        Alan R.  Baldwin 
  254.                        Kent State University 
  255.                        Physics Department 
  256.                        Kent, Ohio 44242 
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.                                     CHAPTER 1
  272.  
  273.                                   THE ASSEMBLER
  274.  
  275.  
  276.  
  277.  
  278.  
  279.         1.1  THE ASXXXX ASSEMBLERS 
  280.  
  281.  
  282.            The  ASxxxx  assemblers are a series of microprocessor assem-
  283.         blers written in the C programming language.  Each assembler has
  284.         a device specific section which includes:  
  285.  
  286.              1.  device  description, byte order, and file extension in-
  287.                  formation 
  288.  
  289.              2.  a  table  of  the assembler general directives, special
  290.                  device directives, assembler mnemonics  and  associated
  291.                  operation codes 
  292.  
  293.              3.  machine specific code for processing the device mnemon-
  294.                  ics, addressing modes, and special directives 
  295.  
  296.         The device specific information is detailed in the appendices.  
  297.  
  298.            The assemblers have a common device independent section which
  299.         handles the details of file input/output, symbol  table  genera-
  300.         tion,  program/data  areas,  expression  analysis, and assembler
  301.         directive processing.  
  302.  
  303.         The assemblers provide the following features:  
  304.  
  305.              1.  Command string control of assembly functions 
  306.  
  307.              2.  Alphabetized, formatted symbol table listing 
  308.  
  309.              3.  Relocatable object modules 
  310.  
  311.              4.  Global symbols for linking object modules 
  312.  
  313.              5.  Conditional assembly directives 
  314.  
  315.  
  316.  
  317.         THE ASSEMBLER                                           PAGE 1-2
  318.         THE ASXXXX ASSEMBLERS
  319.  
  320.  
  321.              6.  Program sectioning directives 
  322.  
  323.  
  324.            ASxxxx assembles one or more source files into a single relo-
  325.         catable ascii object file.  The output of the ASxxxx  assemblers
  326.         consists of an ascii relocatable object file(*.rel), an assembly
  327.         listing file(*.lst), and a symbol file(*.sym).  
  328.  
  329.  
  330.         1.1.1  Assembly Pass 1 
  331.  
  332.  
  333.            During  pass  1, ASxxxx opens all source files and performs a
  334.         rudimenatry assembly of each source statement.  During this pro-
  335.         cess  all symbol tables are built, program sections defined, and
  336.         number of bytes for each assembled source line is estimated.  
  337.  
  338.            At the end of pass 1 all undefined symbols may be made global
  339.         (external) using the ASxxxx switch -g, otherwise undefined  sym-
  340.         bols will be flagged as errors during succeeding passes.  
  341.  
  342.  
  343.         1.1.2  Assembly Pass 2 
  344.  
  345.  
  346.            During  pass  2  the ASxxxx assembler resolves forward refer-
  347.         ences and determines the number  of  bytes  for  each  assembled
  348.         line.   The  number  of bytes used by a particular assembler in-
  349.         struction may depend upon the addressing mode, whether  the  in-
  350.         struction allows multiple forms based upon the relative distance
  351.         to the addressed location, or other factors.   Pass  2  resolves
  352.         these cases and determines the address of all symbols.  
  353.  
  354.  
  355.         1.1.3  Assembly Pass 3 
  356.  
  357.  
  358.            Pass 3 by the assembler generates the listing file, the relo-
  359.         catable output file, and the symbol tables.  Also during pass  3
  360.         the errors will be reported.  
  361.  
  362.            The  relocatable object file is an ascii file containing sym-
  363.         bol references and definitions, program  area  definitions,  and
  364.         the  relocatable assembled code, the linker ASLINK will use this
  365.         information to generate an absolute load file (Motorola or Intel
  366.         formats).  
  367.  
  368.  
  369.  
  370.  
  371.         THE ASSEMBLER                                           PAGE 1-3
  372.         SOURCE PROGRAM FORMAT
  373.  
  374.  
  375.         1.2  SOURCE PROGRAM FORMAT 
  376.  
  377.  
  378.  
  379.         1.2.1  Statement Format 
  380.  
  381.  
  382.            A source program is composed of assembly-language statements.
  383.         Each statement must be completed on one line.  A line  may  con-
  384.         tain a maximum of 128 characters, longer lines are truncated and
  385.         lost.  
  386.  
  387.            An  ASxxxx  assembler  statement  may  have  as  many as four
  388.         fields.  These fields are identified by their order  within  the
  389.         statement  and/or  by separating characters between fields.  The
  390.         general format of the ASxxxx statement is:  
  391.  
  392.               [label:]  Operator        Operand         [;Comment(s)] 
  393.  
  394.            The  label and comment fields are optional.  The operator and
  395.         operand fields are interdependent.  The operator field may be an
  396.         assembler  directive or an assembly mnemonic.  The operand field
  397.         may be optional or required as defined in  the  context  of  the
  398.         operator.  
  399.  
  400.            ASxxxx  interprets  and  processes source statements one at a
  401.         time.  Each statement causes a particular operation to  be  per-
  402.         formed.  
  403.  
  404.  
  405.         1.2.1.1  Label Field  - 
  406.  
  407.            A  label is a user-defined symbol which is assigned the value
  408.         of the current location counter and entered into  the  user  de-
  409.         fined  symbol  table.   The  current location counter is used by
  410.         ASxxxx to assign memory addresses to the source  program  state-
  411.         ments as they are encountered during the assembly process.  Thus
  412.         a label is a means  of  symbolically  referring  to  a  specific
  413.         statement.  
  414.  
  415.            When  a program section is absolute, the value of the current
  416.         location counter is absolute;  its value references an  absolute
  417.         memory  address.   Similarly, when a program section is relocat-
  418.         able, the value of the current location counter is  relocatable.
  419.         A  relocation  bias  calculated at link time is added to the ap-
  420.         parent value of the current location counter  to  establish  its
  421.         effective  absolute  address  at  execution time.  (The user can
  422.         also force the linker to relocate sections defined as  absolute.
  423.         This may be required under special circumstances.) 
  424.  
  425.            If  present,  a  label  must  be  the first field in a source
  426.         statement and must be terminated by a colon (:).   For  example,
  427.  
  428.  
  429.         THE ASSEMBLER                                           PAGE 1-4
  430.         SOURCE PROGRAM FORMAT
  431.  
  432.  
  433.         if  the  value  of  the  current  location  counter  is absolute
  434.         01F0(H), the statement:  
  435.  
  436.               abcd:     nop 
  437.  
  438.         assigns  the  value  01F0(H) to the label abcd.  If the location
  439.         counter value were relocatable, the final value of abcd would be
  440.         01F0(H)+K, where K represents the relocation bias of the program
  441.         section, as calculated by the linker at link time.  
  442.  
  443.            More  than  one label may appear within a single label field.
  444.         Each label so specified is assigned the same address value.  For
  445.         example,  if  the  value  of  the  current  location  counter is
  446.         1FF0(H), the multiple labels in the following statement are each
  447.         assigned the value 1FF0(H):  
  448.  
  449.               abcd:     aq:     $abc:   nop 
  450.  
  451.            Multiple labels may also appear on successive lines.  For ex-
  452.         ample, the statements 
  453.  
  454.               abcd:  
  455.               aq:  
  456.               $abc:     nop 
  457.  
  458.         likewise  cause  the  same value to be assigned to all three la-
  459.         bels.  
  460.  
  461.            A  double  colon  (::)  defines the label as a global symbol.
  462.         For example, the statement 
  463.  
  464.               abcd::    nop 
  465.  
  466.         establishes the label abcd as a global symbol.  The distinguish-
  467.         ing attribute of a global symbol is that it  can  be  referenced
  468.         from  within an object module other than the module in which the
  469.         symbol is defined.  References to this label  in  other  modules
  470.         are  resolved when the modules are linked as a composite execut-
  471.         able image.  
  472.  
  473.         The legal characters for defining labels are:  
  474.  
  475.                 A through Z 
  476.                 a through z 
  477.                 0 through 9 
  478.                 . (Period) 
  479.                 $ (Dollar sign) 
  480.                 _ (underscore) 
  481.  
  482.            A  label may be any length, however, only the first eight (8)
  483.         characters are significant and, therefore must be  unique  among
  484.         all   labels  in  the  source  program  (not  necessarily  among
  485.  
  486.  
  487.         THE ASSEMBLER                                           PAGE 1-5
  488.         SOURCE PROGRAM FORMAT
  489.  
  490.  
  491.         separately compiled modules).  An error code(s) (m or p) will be
  492.         generated  in the assembly listing if the first eight characters
  493.         in two or more labels are the same.  The m code is caused by the
  494.         redeclaration  of  the symbol or its reference by another state-
  495.         ment.  The p code is generated because the symbols  location  is
  496.         changing on each pass through the source file.  
  497.  
  498.            The  label  must  not  start with the characters 0-9, as this
  499.         designates a local symbol with special attributes described in a
  500.         later section.  
  501.  
  502.  
  503.         1.2.1.2  Operator Field  - 
  504.  
  505.            The  operator field specifies the action to be performed.  It
  506.         may consist of an instruction mnemonic (op code) or an assembler
  507.         directive.  
  508.  
  509.            When  the  operator is an instruction mnemonic, a machine in-
  510.         struction is generated and the assembler evaluates the addresses
  511.         of  the operands which follow.  When the operator is a directive
  512.         ASxxxx performs certain control actions or processing operations
  513.         during assembly of the source program.  
  514.  
  515.            Leading  and  trailing  spaces  or tabs in the operator field
  516.         have no significance;  such characters serve  only  to  separate
  517.         the operator field from the preceeding and following fields.  
  518.  
  519.            An operator is terminated by a space, tab or end of line.  
  520.  
  521.  
  522.         1.2.1.3  Operand Field  - 
  523.  
  524.            When  the  operator is an instruction mnemonic (op code), the
  525.         operand  field  contains  program  variables  that  are  to   be
  526.         evaluated/manipulated by the operator.  
  527.  
  528.            Operands  may  be  expressions  or  symbols, depending on the
  529.         operator.  Multiple expressions used in the operand  fields  may
  530.         be  separated  by a comma.  An operand should be preceeded by an
  531.         operator field;  if it is not, the statement will give an  error
  532.         (q  or  o).   All  operands  following instruction mnemonics are
  533.         treated as expressions.  
  534.  
  535.            The operand field is terminated by a semicolon when the field
  536.         is followed  by  a  comment.   For  example,  in  the  following
  537.         statement:  
  538.  
  539.               label:    lda     abcd,x          ;Comment field 
  540.  
  541.         the  tab  between lda and abcd terminates the operator field and
  542.         defines the beginning of the operand field;  a  comma  separates
  543.  
  544.  
  545.         THE ASSEMBLER                                           PAGE 1-6
  546.         SOURCE PROGRAM FORMAT
  547.  
  548.  
  549.         the operands abcd and x;  and a semicolon terminates the operand
  550.         field and defines the beginning of the comment field.   When  no
  551.         comment  field  follows,  the operand field is terminated by the
  552.         end of the source line.  
  553.  
  554.  
  555.         1.2.1.4  Comment Field  - 
  556.  
  557.            The comment field begins with a semicolon and extends through
  558.         the end of the line.  This field is optional and may contain any
  559.         7-bit ascii character except null.  
  560.  
  561.            Comments  do not affect assembly processing or program execu-
  562.         tion.  
  563.  
  564.  
  565.         1.3  SYMBOLS AND EXPRESSIONS 
  566.  
  567.  
  568.            This  section  describes the generic components of the ASxxxx
  569.         assemblers:  the character set, the conventions observed in con-
  570.         structing  symbols,  and  the use of numbers, operators, and ex-
  571.         pressions.  
  572.  
  573.  
  574.         1.3.1  Character Set 
  575.  
  576.  
  577.            The following characters are legal in ASxxxx source programs: 
  578.  
  579.              1.  The  letters  A  through Z.  Both upper- and lower-case
  580.                  letters are acceptable.  The assemblers are case sensi-
  581.                  tive,  i.e.  ABCD and abcd are different symbols.  (The
  582.                  assemblers can be made case insensitive by  recompiling
  583.                  with the appropriate switches.) 
  584.  
  585.              2.  The digits 0 through 9 
  586.  
  587.              3.  The  characters . (period), $ (dollar sign), and _ (un-
  588.                  derscore).  
  589.  
  590.              4.  The special characters listed in Tables 1 through 6.  
  591.  
  592.  
  593.            Tables  1  through  6  describe  the various ASxxxx label and
  594.         field terminators, assignment operators, operand separators, as-
  595.         sembly, unary, binary, and radix operators.  
  596.  
  597.  
  598.         THE ASSEMBLER                                           PAGE 1-7
  599.         SYMBOLS AND EXPRESSIONS
  600.  
  601.  
  602.         Table 1         Label Terminators and Assignment Operators 
  603.         ---------------------------------------------------------------- 
  604.  
  605.                 :   Colon               Label terminator.  
  606.  
  607.                 ::  Double colon        Label  Terminator;   defines the
  608.                                         label as a global label.  
  609.  
  610.                 =   Equal sign          Direct assignment operator.  
  611.  
  612.                 ==  Double equal        Direct assignment operator;  
  613.                     sign                defines  the  symbol as a global
  614.                                         symbol.  
  615.  
  616.         ---------------------------------------------------------------- 
  617.  
  618.  
  619.  
  620.  
  621.  
  622.         Table 2         Field Terminators and Operand Separators 
  623.         ---------------------------------------------------------------- 
  624.  
  625.                     Tab                 Item or field terminator.  
  626.  
  627.                     Space               Item or field terminator.  
  628.  
  629.                 ,   Comma               Operand field separator.  
  630.  
  631.                 ;   Semicolon           Comment field indicator.  
  632.  
  633.         ---------------------------------------------------------------- 
  634.  
  635.  
  636.  
  637.  
  638.  
  639.         Table 3         Assembler Operators 
  640.         ---------------------------------------------------------------- 
  641.  
  642.                 #   Number sign         Immediate expression indicator. 
  643.  
  644.                 .   Period              Current location counter.  
  645.  
  646.                 (   Left parenthesis    Expression delimiter.  
  647.  
  648.                 )   Right parenthesis   Expression delimeter.  
  649.  
  650.         ---------------------------------------------------------------- 
  651.  
  652.  
  653.         THE ASSEMBLER                                           PAGE 1-8
  654.         SYMBOLS AND EXPRESSIONS
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.         Table 4         Unary Operators 
  663.         ---------------------------------------------------------------- 
  664.  
  665.                 <   Left bracket        <FEDC   Produces  the lower byte
  666.                                                 value of the expression.
  667.                                                 (DC) 
  668.  
  669.                 >   Right bracket       >FEDC   Produces  the upper byte
  670.                                                 value of the expression.
  671.                                                 (FE) 
  672.  
  673.                 +   Plus sign           +A      Positive value of A 
  674.  
  675.                 -   Minus sign          -A      Produces   the  negative
  676.                                                 (2's complement) of A.  
  677.  
  678.                 '   Single quote        'D      Produces  the  value  of
  679.                                                 the character D.  
  680.  
  681.                 "   Double quote        "AB     Produces the double byte
  682.                                                 value for AB.  
  683.  
  684.                 \   Backslash           '\n     Unix style characters 
  685.                                                 \b, \f, \n, \r, \t 
  686.                                      or '\001   or octal byte values.  
  687.  
  688.         ---------------------------------------------------------------- 
  689.  
  690.  
  691.  
  692.  
  693.  
  694.  
  695.  
  696.         THE ASSEMBLER                                           PAGE 1-9
  697.         SYMBOLS AND EXPRESSIONS
  698.  
  699.  
  700.         Table 5         Binary Operators 
  701.         ---------------------------------------------------------------- 
  702.  
  703.                 <<  Double          0800 << 4   Produces the 4 bit 
  704.                     Left bracket                left-shifted   value  of
  705.                                                 0800.  (8000) 
  706.  
  707.                 >>  Double          0800 >> 4   Produces the 4 bit 
  708.                     Right bracket               right-shifted  value  of
  709.                                                 0800.  (0080) 
  710.  
  711.                 +   Plus sign       A + B       Arithmetic      Addition
  712.                                                 operator.  
  713.  
  714.                 -   Minus sign      A - B       Arithmetic   Subtraction
  715.                                                 operator.  
  716.  
  717.                 *   Asterisk        A * B       Arithmetic   Multiplica-
  718.                                                 tion operator.   (signed
  719.                                                 16-bit) 
  720.  
  721.                 /   Slash           A / B       Arithmetic      Division
  722.                                                 operator.        (signed
  723.                                                 16-bit quotient) 
  724.  
  725.                 &   Ampersand       A & B       Logical AND operator.  
  726.  
  727.                 |   Bar             A | B       Logical OR operator.  
  728.  
  729.                 %   Percent sign    A % B       Modulus operator.  
  730.                                                 (16-bit value) 
  731.  
  732.                 ^   Up arrow or     A ^ B       EXCLUSIVE OR operator.  
  733.                     circumflex 
  734.  
  735.         ---------------------------------------------------------------- 
  736.  
  737.  
  738.  
  739.  
  740.  
  741.  
  742.  
  743.         THE ASSEMBLER                                          PAGE 1-10
  744.         SYMBOLS AND EXPRESSIONS
  745.  
  746.  
  747.         Table 6         Temporary Radix Operators 
  748.         ---------------------------------------------------------------- 
  749.  
  750.                 0b, 0B                  Binary radix operator.  
  751.  
  752.                 0@, 0o, 0O, 0q, 0Q      Octal radix operator.  
  753.  
  754.                 0d, 0D                  Decimal radix operator.  
  755.  
  756.                 0h, 0H, 0x, 0X          Hexidecimal radix operator.  
  757.  
  758.         ---------------------------------------------------------------- 
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.         1.3.2  User-Defined Symbols 
  767.  
  768.  
  769.            User-defined  symbols are those symbols that are equated to a
  770.         specific value through a direct assignment statement  or  appear
  771.         as  labels.  These symbols are added to the User Symbol Table as
  772.         they are encountered during assembly.  
  773.  
  774.         The following rules govern the creation of user-defined symbols: 
  775.  
  776.              1.  Symbols  can  be  composed  of alphanumeric characters,
  777.                  dollar signs ($),  periods  (.),  and  underscores  (_)
  778.                  only.  
  779.  
  780.              2.  The  first  character  of a symbol must not be a number
  781.                  (except in the case of local symbols).  
  782.  
  783.              3.  The  first eight characters of a symbol must be unique.
  784.                  A symbol can be written  with  more  than  eight  legal
  785.                  characters, but the ninth and subsequent characters are
  786.                  ignored.  
  787.  
  788.              4.  Spaces and Tabs must not be embedded within a symbol.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.         THE ASSEMBLER                                          PAGE 1-11
  795.         SYMBOLS AND EXPRESSIONS
  796.  
  797.  
  798.         1.3.3  Local Symbols 
  799.  
  800.  
  801.            Local  symbols are specially formatted symbols used as labels
  802.         within a block of coding that has been delimited as a local sym-
  803.         bol  block.   Local  symbols  are  of  the form n$, where n is a
  804.         decimal integer from 0 to 255,  inclusive.   Examples  of  local
  805.         symbols are:  
  806.  
  807.               1$ 
  808.               27$ 
  809.               138$ 
  810.               244$ 
  811.  
  812.            The  range  of  a local symbol block consists of those state-
  813.         ments between two normally constructed  symbolic  labels.   Note
  814.         that a statement of the form:  
  815.  
  816.               ALPHA = EXPRESSION 
  817.  
  818.         is a direct assignment statement but does not create a label and
  819.         thus does not delimit the range of a local symbol block.  
  820.  
  821.            Note that the range of a local symbol block may extend across
  822.         program areas.  
  823.  
  824.            Local symbols provide a convenient means of generating labels
  825.         for branch instructions and other such references  within  local
  826.         symbol  blocks.   Using local symbols reduces the possibility of
  827.         symbols with multiple definitions appearing within a  user  pro-
  828.         gram.   In  addition,  the  use  of local symbols differentiates
  829.         entry-point labels from local labels, since local labels  cannot
  830.         be referenced from outside their respective local symbol blocks.
  831.         Thus, local symbols of the same name can appear in  other  local
  832.         symbol blocks without conflict.  Local symbols require less sym-
  833.         bol table space than normal symbols.  Their use is recommended. 
  834.  
  835.            The  use of the same local symbol within a local symbol block
  836.         will generate one or both of the m or p errors.  
  837.  
  838.  
  839.         THE ASSEMBLER                                          PAGE 1-12
  840.         SYMBOLS AND EXPRESSIONS
  841.  
  842.  
  843.         Example of local symbols:  
  844.  
  845.                 a:      ldx     #atable ;get table address
  846.                         lda     #0d48   ;table length
  847.                 1$:     clr     ,x+     ;clear
  848.                         deca
  849.                         bne     1$
  850.                         
  851.                 b:      ldx     #btable ;get table address
  852.                         lda     #0d48   ;table length
  853.                 1$:     clr     ,x+     ;clear
  854.                         deca
  855.                         bne     1$
  856.  
  857.  
  858.         1.3.4  Current Location Counter 
  859.  
  860.  
  861.            The  period  (.) is the symbol for the current location coun-
  862.         ter.  When used in the operand  field  of  an  instruction,  the
  863.         period   represents  the  address  of  the  first  byte  of  the
  864.         instruction:  
  865.  
  866.                 AS:     ldx     #.      ;The period (.) refers to
  867.                                         ;the address of the ldx
  868.                                         ;instruction.
  869.  
  870.            When  used  in  the  operand field of an ASxxxx directive, it
  871.         represents the address of the current byte or word:  
  872.  
  873.                 QK = 0
  874.         
  875.                 .word   0xFFFE,.+4,QK   ;The operand .+4 in the .word
  876.                                         ;directive represents a value
  877.                                         ;stored in the second of the
  878.                                         ;three words during assembly.
  879.  
  880.            If  we  assume  the  current  value of the program counter is
  881.         0H0200, then during assembly, ASxxxx  reserves  three  words  of
  882.         storage  starting  at  location 0H0200.  The first value, a hex-
  883.         idecimal constant FFFE, will be stored at location 0H0200.   The
  884.         second  value  represented  by  .+4  will  be stored at location
  885.         0H0202, its value will be 0H0206 ( = 0H0202  +  4).   The  third
  886.         value  defined  by  the  symbol  QK  will  be placed at location
  887.         0H0204.  
  888.  
  889.            At the beginning of each assembly pass, ASxxxx resets the lo-
  890.         cation counter.  Normally, consecutive memory locations are  as-
  891.         signed  to  each  byte  of  object code generated.  However, the
  892.         value of the location counter can be changed  through  a  direct
  893.         assignment statement of the following form:  
  894.  
  895.  
  896.  
  897.         THE ASSEMBLER                                          PAGE 1-13
  898.         SYMBOLS AND EXPRESSIONS
  899.  
  900.  
  901.               . = . + expression 
  902.  
  903.  
  904.            The  new  location  counter can only be specified relative to
  905.         the current location counter.  Neglecting to specify the current
  906.         program  counter  along with the expression on the right side of
  907.         the assignment operator will generate the (.) error.   (Absolute
  908.         program areas may use the .org directive to specify the absolute
  909.         location of the current program counter.) 
  910.  
  911.         The following coding illustrates the use of the current location
  912.         counter:  
  913.  
  914.                 .area   CODE1   (ABS)   ;program area CODE1
  915.                                         ;is ABSOLUTE
  916.         
  917.                 .org    0H100           ;set location to
  918.                                         ;0H100 absolute
  919.         
  920.         num1:   ldx     #.+0H10         ;The label num1 has
  921.                                         ;the value 0H100.
  922.                                         ;X is loaded with
  923.                                         ;0H100 + 0H10
  924.         
  925.                 .org    0H130           ;location counter
  926.                                         ;set to 0H130
  927.         
  928.         num2:   ldy     #.              ;The label num2 has
  929.                                         ;the value 0H130.
  930.                                         ;Y is loaded with
  931.                                         ;value 0H130.
  932.         
  933.         
  934.                 .area   CODE2   (REL)   ;program area CODE2
  935.                                         ;is RELOCATABLE
  936.         
  937.                 . = . + 0H20            ;Set location counter
  938.                                         ;to relocatable 0H20 of
  939.                                         ;the program section.
  940.         
  941.         num3:   .word   0               ;The label num3 has
  942.                                         ;the value
  943.                                         ;of relocatable 0H20.
  944.         
  945.                 . = . + 0H40            ;will reserve 0H40
  946.                                         ;bytes of storage as will
  947.                 .blkb   0H40            ;or
  948.                 .blkw   0H20
  949.  
  950.            The  .blkb  and .blkw directives are the preferred methods of
  951.         allocating space.  
  952.  
  953.  
  954.  
  955.         THE ASSEMBLER                                          PAGE 1-14
  956.         SYMBOLS AND EXPRESSIONS
  957.  
  958.  
  959.         1.3.5  Numbers 
  960.  
  961.  
  962.            ASxxxx  assumes that all numbers in the source program are to
  963.         be interpreted in decimal radix unless otherwise specified.  The
  964.         .radix  directive  may  be used to specify the default as octal,
  965.         decimal, or hexidecimal.  Individual numbers can  be  designated
  966.         as  binary, octal, decimal, or hexidecimal through the temporary
  967.         radix prefixes shown in table 6.  
  968.  
  969.            Negative  numbers  must be preceeded by a minus sign;  ASxxxx
  970.         translates such numbers into two's  complement  form.   Positive
  971.         numbers may (but need not) be preceeded by a plus sign.  
  972.  
  973.            Numbers are always considered to be absolute values, therefor
  974.         they are never relocatable.  
  975.  
  976.  
  977.         1.3.6  Terms 
  978.  
  979.  
  980.            A  term is a component of an expression and may be one of the
  981.         following:  
  982.  
  983.  
  984.              1.  A number.  
  985.  
  986.              2.  A symbol:  
  987.                  1.  A  period (.) specified in an expression causes the
  988.                      current location counter to be used.  
  989.                  2.  A User-defined symbol.  
  990.                  3.  An undefined symbol is assigned a value of zero and
  991.                      inserted in the User-Defined symbol table as an un-
  992.                      defined symbol.  
  993.  
  994.              3.  A single quote followed by a single ascii character, or
  995.                  a double quote followed by two ascii characters.  
  996.  
  997.              4.  An  expression enclosed in parenthesis.  Any expression
  998.                  so enclosed is evaluated and reduced to a  single  term
  999.                  before  the remainder of the expression in which it ap-
  1000.                  pears is evaluated.  Parenthesis, for example,  may  be
  1001.                  used  to  alter the left-to-right evaluation of expres-
  1002.                  sions, (as in A*B+C versus A*(B+C)), or to apply a  un-
  1003.                  ary operator to an entire expression (as in -(A+B)).  
  1004.  
  1005.              5.  A unary operator followed by a symbol or number.  
  1006.  
  1007.  
  1008.  
  1009.  
  1010.  
  1011.         THE ASSEMBLER                                          PAGE 1-15
  1012.         SYMBOLS AND EXPRESSIONS
  1013.  
  1014.  
  1015.         1.3.7  Expressions 
  1016.  
  1017.  
  1018.            Expressions  are  combinations  of  terms  joined together by
  1019.         binary operators.  Expressions reduce to a  16-bit  value.   The
  1020.         evaluation  of  an  expression includes the determination of its
  1021.         attributes.  A resultant expression value may be  one  of  three
  1022.         types  (as  described  later in this section):  relocatable, ab-
  1023.         solute, and external.  
  1024.  
  1025.         Expressions are evaluate with an operand hierarchy as follows:  
  1026.  
  1027.                 *       /       %       multiplication,
  1028.                                         division, and
  1029.                                         modulus first.
  1030.         
  1031.                 +       -               addition and
  1032.                                         subtraction second.
  1033.         
  1034.                 <<      >>              left shift and
  1035.                                         right shift third.
  1036.         
  1037.                 ^                       exclusive or fourth.
  1038.         
  1039.                 &                       logical and fifth.
  1040.         
  1041.                 |                       logical or last
  1042.         
  1043.                 except that unary operators take precedence over binary
  1044.                 operators.
  1045.  
  1046.  
  1047.            A  missing  or  illegal  operator  terminates  the expression
  1048.         analysis, causing error codes (o) and/or  (q)  to  be  generated
  1049.         depending upon the context of the expression itself.  
  1050.  
  1051.            At assembly time the value of an external (global) expression
  1052.         is equal to the value of the absolute part of  that  expression.
  1053.         For  example,  the expression external+4, where 'external' is an
  1054.         external symbol, has the value of 4.  This expression,  however,
  1055.         when  evaluated  at link time takes on the resolved value of the
  1056.         symbol 'external', plus 4.  
  1057.  
  1058.            Expressions,  when  evaluated  by  ASxxxx,  are  one of three
  1059.         types:  relocatable, absolute, or external.  The following  dis-
  1060.         tinctions are important:  
  1061.  
  1062.              1.  An  expression is relocatable if its value is fixed re-
  1063.                  lative to the base address of the program area in which
  1064.                  it appears;  it will have an offset value added at link
  1065.                  time.  Terms that contain labels defined in relocatable
  1066.                  program   areas   will   have   a   relocatable  value;
  1067.  
  1068.  
  1069.         THE ASSEMBLER                                          PAGE 1-16
  1070.         SYMBOLS AND EXPRESSIONS
  1071.  
  1072.  
  1073.                  similarly, a period (.) in a relocatable program  area,
  1074.                  representing  the value of the current program location
  1075.                  counter, will also have a relocatable value.  
  1076.  
  1077.              2.  An  expression  is  absolute if its value is fixed.  An
  1078.                  expression whose terms are numbers and ascii characters
  1079.                  will  reduce  to  an absolute value.  A relocatable ex-
  1080.                  pression or term minus a relocatable term,  where  both
  1081.                  elements  being  evaluated  belong  to the same program
  1082.                  area, is an absolute expression.  This is because every
  1083.                  term  in  a  program area has the same relocation bias.
  1084.                  When one term is subtracted from the other the  reloca-
  1085.                  tion bias is zero.  
  1086.  
  1087.              3.  An  expression is external (or global) if it contains a
  1088.                  single global reference (plus or minus an absolute  ex-
  1089.                  pression  value) that is not defined within the current
  1090.                  program.  Thus, an external  expression  is  only  par-
  1091.                  tially  defined following assembly and must be resolved
  1092.                  at link time.  
  1093.  
  1094.  
  1095.  
  1096.         1.4  GENERAL ASSEMBLER DIRECTIVES 
  1097.  
  1098.  
  1099.            An  ASxxxx  directive  is placed in the operator field of the
  1100.         source line.  Only one directive is  allowed  per  source  line.
  1101.         Each  directive  may  have  a blank operand field or one or more
  1102.         operands.  Legal operands differ with each directive.  
  1103.  
  1104.  
  1105.         1.4.1  .module Directive 
  1106.  
  1107.         Format:  
  1108.  
  1109.                 .module string 
  1110.  
  1111.            The .module directive causes the string to be included in the
  1112.         assemblers output file as an identifier for this particular  ob-
  1113.         ject  module.   The  string  may  be  from  1 to 8 characters in
  1114.         length.  Only one identifier is allowed  per  assembled  module.
  1115.         The  main use of this directive is to allow the linker to report
  1116.         a modules' use of undefined symbols.  At link time all undefined
  1117.         symbols  are  reported  and  the  modules  referencing  them are
  1118.         listed.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.         THE ASSEMBLER                                          PAGE 1-17
  1124.         GENERAL ASSEMBLER DIRECTIVES
  1125.  
  1126.  
  1127.         1.4.2  .title Directive 
  1128.  
  1129.         Format:  
  1130.  
  1131.                 .title  string 
  1132.  
  1133.            The .title directive provides a character string to be placed
  1134.         on the second line of each page during listing.  
  1135.  
  1136.  
  1137.         1.4.3  .sbttl Directive 
  1138.  
  1139.         Format:  
  1140.  
  1141.                 .sbttl  string 
  1142.  
  1143.            The .sbttl directive provides a character string to be placed
  1144.         on the third line of each page during listing.  
  1145.  
  1146.  
  1147.         1.4.4  .page Directive 
  1148.  
  1149.         Format:  
  1150.  
  1151.                 .page 
  1152.  
  1153.            The .page directive causes a page ejection with a new heading
  1154.         to be printed.  The new page occurs after the next line  of  the
  1155.         source  program is processed, this allows an immediately follow-
  1156.         ing .sbttl directive to appear  on  the  new  page.   The  .page
  1157.         source line will not appear in the file listing.  
  1158.  
  1159.  
  1160.         1.4.5  .byte and .db Directives 
  1161.  
  1162.         Format:  
  1163.  
  1164.                 .byte   exp             ;Stores the binary value
  1165.                 .db     exp             ;of the expression in the
  1166.                                         ;next byte.
  1167.         
  1168.                 .byte   exp1,exp2,expn  ;Stores the binary values
  1169.                 .db     exp1,exp2,expn  ;of the list of expressions
  1170.                                         ;in successive bytes.
  1171.         
  1172.         where:  exp,    represent expressions that will be
  1173.                 exp1,   truncated to 8-bits of data.
  1174.                 .       Each expression will be calculated
  1175.                 .       as a 16-bit word expression,
  1176.                 .       the high-order byte will be truncated.
  1177.                 .       Multiple expressions must be
  1178.                 expn    separated by commas.
  1179.  
  1180.  
  1181.         THE ASSEMBLER                                          PAGE 1-18
  1182.         GENERAL ASSEMBLER DIRECTIVES
  1183.  
  1184.  
  1185.            The  .byte  or .db directives are used to generate successive
  1186.         bytes of binary data in the object module.  
  1187.  
  1188.  
  1189.         1.4.6  .word and .dw Directives 
  1190.  
  1191.         Format:  
  1192.  
  1193.                 .word   exp             ;Stores the binary value
  1194.                 .dw     exp             ;of the expression in
  1195.                                         ;the next word.
  1196.         
  1197.                 .word   exp1,exp2,expn  ;Stores the binary values
  1198.                 .dw     exp1,exp2,expn  ;of the list of expressions
  1199.                                         ;in successive words.
  1200.         
  1201.         where:  exp,    represent expressions that will occupy two
  1202.                 exp1,   bytes of data. Each expression will be
  1203.                 .       calculated as a 16-bit word expression.
  1204.                 .       Multiple expressions must be
  1205.                 expn    separated by commas.
  1206.  
  1207.            The  .word  or .dw directives are used to generate successive
  1208.         words of binary data in the object module.  
  1209.  
  1210.  
  1211.         1.4.7  .blkb, .blkw, and .ds Directives 
  1212.  
  1213.         Format:  
  1214.  
  1215.                 .blkb   N       ;reserve N bytes of space
  1216.                 .blkw   N       ;reserve N words of space
  1217.                 .ds     N       ;reserve N bytes of space
  1218.  
  1219.            The  .blkb  and .ds directives reserve byte blocks in the ob-
  1220.         ject module;  the .blkw directive reserves word blocks.  
  1221.  
  1222.  
  1223.         1.4.8  .ascii Directive 
  1224.  
  1225.         Format:  
  1226.  
  1227.                 .ascii  /string/ 
  1228.  
  1229.         where:  string  is a string of printable ascii characters.  
  1230.  
  1231.                 /  /    represent   the  delimiting  characters.   These
  1232.                         delimiters   may   be   any   paired    printing
  1233.                         characters,  as  long  as the characters are not
  1234.                         contained within  the  string  itself.   If  the
  1235.                         delimiting  characters  do not match, the .ascii
  1236.                         directive will give the (q) error.  
  1237.  
  1238.  
  1239.         THE ASSEMBLER                                          PAGE 1-19
  1240.         GENERAL ASSEMBLER DIRECTIVES
  1241.  
  1242.  
  1243.  
  1244.         The  .ascii  directive  places  one binary byte of data for each
  1245.         character in the string into the object module.  
  1246.  
  1247.  
  1248.         1.4.9  .asciz Directive 
  1249.  
  1250.         Format:  
  1251.  
  1252.                 .asciz  /string/ 
  1253.  
  1254.         where:  string  is a string of printable asciz characters.  
  1255.  
  1256.                 /  /    represent   the  delimiting  characters.   These
  1257.                         delimiters   may   be   any   paired    printing
  1258.                         characters,  as  long  as the characters are not
  1259.                         contained within  the  string  itself.   If  the
  1260.                         delimiting  characters  do not match, the .asciz
  1261.                         directive will give the (q) error.  
  1262.  
  1263.         The  .ascii  directive  places  one binary byte of data for each
  1264.         character in the string into the object module.   Following  all
  1265.         the  character  data  a  zero  byte is inserted to terminate the
  1266.         character string.  
  1267.  
  1268.  
  1269.         1.4.10  .radix Directive 
  1270.  
  1271.         Format:  
  1272.  
  1273.                 .radix  character 
  1274.  
  1275.         where:  character  represents  a single character specifying the
  1276.                         default radix to be used for succeeding numbers.
  1277.                         The character may be any one of the following:  
  1278.  
  1279.                         B,b     Binary
  1280.         
  1281.                         O,o     Octal
  1282.                         Q,q
  1283.                         @
  1284.         
  1285.                         D,d     Decimal
  1286.                         'blank'
  1287.         
  1288.                         H,h     Hexidecimal
  1289.                         X,x
  1290.  
  1291.  
  1292.  
  1293.  
  1294.         THE ASSEMBLER                                          PAGE 1-20
  1295.         GENERAL ASSEMBLER DIRECTIVES
  1296.  
  1297.  
  1298.         1.4.11  .even Directive 
  1299.  
  1300.         Format:  
  1301.  
  1302.                 .even 
  1303.  
  1304.            The .even directive ensures that the current location counter
  1305.         contains an even boundary value by adding 1 if the current loca-
  1306.         tion is odd.  
  1307.  
  1308.  
  1309.         1.4.12  .odd Directive 
  1310.  
  1311.         Format:  
  1312.  
  1313.                 .odd 
  1314.  
  1315.            The  .odd directive ensures that the current location counter
  1316.         contains an odd boundary value by adding one if the current  lo-
  1317.         cation is even.  
  1318.  
  1319.  
  1320.         1.4.13  .area Directive 
  1321.  
  1322.         Format:  
  1323.  
  1324.                 .area   name    [(options)] 
  1325.  
  1326.         where:  name    represents the symbolic name of the program sec-
  1327.                         tion.   This  name  may  be  the  same  as   any
  1328.                         user-defined  symbol  as  the area names are in-
  1329.                         dependent of all symbols and labels.  
  1330.  
  1331.                 options specify the type of program or data area:  
  1332.                         ABS     absolute (automatically invokes OVR) 
  1333.                         REL     relocatable 
  1334.                         OVR     overlay 
  1335.                         CON     concatenate 
  1336.  
  1337.  
  1338.            The .area directive provides a means of defining and separat-
  1339.         ing multiple programming and data sections.   The  name  is  the
  1340.         area  label used by the assembler and the linker to collect code
  1341.         from various separately assembled modules into one section.  The
  1342.         name may be from 1 to 8 characters in length.  
  1343.  
  1344.            The options are specified within parenthesis and separated by
  1345.         commas as shown in the following example:  
  1346.  
  1347.                 .area  TEST  (REL,CON)  ;This section is relocatable
  1348.                                         ;and concatenated with other
  1349.                                         ;sections of this program area.
  1350.  
  1351.  
  1352.         THE ASSEMBLER                                          PAGE 1-21
  1353.         GENERAL ASSEMBLER DIRECTIVES
  1354.  
  1355.  
  1356.         
  1357.                 .area  DATA  (REL,OVR)  ;This section is relocatable
  1358.                                         ;and overlays other sections
  1359.                                         ;of this program area.
  1360.         
  1361.                 .area  SYS   (ABS,OVR)  ;(CON not allowed with ABS)
  1362.                                         ;This section is defined as
  1363.                                         ;absolute. Absolute sections
  1364.                                         ;are always overlayed with
  1365.                                         ;other sections of this program
  1366.                                         ;area.
  1367.  
  1368.            The  default  area type is REL|CON;  i.e.  a relocatable sec-
  1369.         tion which is concatenated with other sections of code with  the
  1370.         same area name.  The ABS option indicates an absolute area.  The
  1371.         OVR and CON options indicate if program  sections  of  the  same
  1372.         name  will overlay each other (start at the same location) or be
  1373.         concatenated with each other (appended to each other).  
  1374.  
  1375.            Multiple  invocations  of  the  .area directive with the same
  1376.         name must specify the same options or leave  the  options  field
  1377.         blank,  this  defaults  to  the previously specified options for
  1378.         this program area.  
  1379.  
  1380.            The  ASxxxx  assemblers  automatically  provide  two  program
  1381.         sections:  
  1382.  
  1383.                 '.  .ABS.'      This dumby section contains all absolute
  1384.                                 symbols and their values.  
  1385.  
  1386.                 '_CODE'         This  is  the default program/data area.
  1387.                                 This program area is of type (REL,CON). 
  1388.  
  1389.  
  1390.         1.4.14  .org Directive 
  1391.  
  1392.         Format:  
  1393.  
  1394.                 .org    exp 
  1395.  
  1396.         where:  exp     is  an absolute expression that becomes the cur-
  1397.                         rent location counter.  
  1398.  
  1399.         The  .org directive is valid only in an absolute program section
  1400.         and will give a (q) error if used in a relocatable program area.
  1401.         The  .org  directive specifies that the current location counter
  1402.         is to become the specified absolute value.  
  1403.  
  1404.  
  1405.  
  1406.  
  1407.         THE ASSEMBLER                                          PAGE 1-22
  1408.         GENERAL ASSEMBLER DIRECTIVES
  1409.  
  1410.  
  1411.         1.4.15  .globl Directive 
  1412.  
  1413.         Format:  
  1414.  
  1415.                 .globl  sym1,sym2,...,symn 
  1416.  
  1417.         where:  sym1,           represent legal symbolic names. When
  1418.                 sym2,...        When multiple symbols are specified,
  1419.                 symn            they are separated by commas.
  1420.  
  1421.            A  .globl directive may also have a label field and/or a com-
  1422.         ment field.  
  1423.  
  1424.            The  .globl directive is provided to define (and thus provide
  1425.         linkage to) symbols not  otherwise  defined  as  global  symbols
  1426.         within  a  module.   In  defining  global  symbols the directive
  1427.         .globl J is similar to:  
  1428.  
  1429.               J == expression or J::  
  1430.  
  1431.            Because  object  modules  are linked by global symbols, these
  1432.         symbols are vital to a program.  All internal symbols  appearing
  1433.         within  a  given program must be defined at the end of pass 1 or
  1434.         they will be considered undefined.  The assembly directive  (-g)
  1435.         can  be  be  invoked to make all undefined symbols global at the
  1436.         end of pass 1.  
  1437.  
  1438.  
  1439.         1.4.16  .if, .else, and .endif Directives 
  1440.  
  1441.         Format:  
  1442.  
  1443.                 .if     expr
  1444.                 .                       ;}
  1445.                 .                       ;} range of true condition
  1446.                 .                       ;}
  1447.                 .else
  1448.                 .                       ;}
  1449.                 .                       ;} range of false condition
  1450.                 .                       ;}
  1451.                 .endif
  1452.  
  1453.            The  conditional  assembly directives allow you to include or
  1454.         exclude blocks of source code during the assembly process, based
  1455.         on the evaluation of the condition test.  
  1456.  
  1457.            The  range of true condition will be processed if the expres-
  1458.         sion 'expr' is not zero (i.e.  true) and the range of false con-
  1459.         dition  will  be processed if the expression 'expr' is zero (i.e
  1460.         false).  The range of true condition is optional as is the .else
  1461.         directive  and  the range of false condition.  The following are
  1462.         all valid .if/.else/.endif constructions:  
  1463.  
  1464.  
  1465.         THE ASSEMBLER                                          PAGE 1-23
  1466.         GENERAL ASSEMBLER DIRECTIVES
  1467.  
  1468.  
  1469.  
  1470.                 .if     A-4             ;evaluate A-4
  1471.                 .byte   1,2             ;insert bytes if A-4 is
  1472.                 .endif                  ;not zero
  1473.         
  1474.                 .if     K+3             ;evaluate K+3
  1475.                 .else
  1476.                 .byte   3,4             ;insert bytes if K+3
  1477.                 .endif                  ;is zero
  1478.         
  1479.                 .if     J&3             ;evaluate J masked by 3
  1480.                 .byte   12              ;insert this byte if J&3
  1481.                 .else                   ;is not zero
  1482.                 .byte   13              ;insert this byte if J&3
  1483.                 .endif                  ;is zero
  1484.  
  1485.  
  1486.         The .if/.else/.endif directives may be nested upto 10 levels.  
  1487.  
  1488.            The  .page  directive  is  processed within a false condition
  1489.         range to allow extended textual information to  be  incorporated
  1490.         in  the  source  program  with  out  the need to use the comment
  1491.         delimiter (;):  
  1492.  
  1493.                 .if     0
  1494.         
  1495.                 .page
  1496.                 This text will be bypassed during assembly
  1497.                 but appear in the listing file.
  1498.                 .
  1499.                 .
  1500.                 .
  1501.         
  1502.                 .endif
  1503.  
  1504.  
  1505.         1.4.17  .include Directive 
  1506.  
  1507.         Format:  
  1508.  
  1509.                 .include        string 
  1510.  
  1511.         where:  string  represents  a  delimited string that is the file
  1512.                         specification of an ASxxxx source file.  
  1513.  
  1514.            The .include directive is used to insert a source file within
  1515.         the source file currently being assembled.  When this  directive
  1516.         is encountered, an implicit .page directive is issued.  When the
  1517.         end of the specified source file is reached, an  implicit  .page
  1518.         directive is issued and input continues from the previous source
  1519.         file.  The maximum nesting level of source files specified by  a
  1520.  
  1521.  
  1522.         THE ASSEMBLER                                          PAGE 1-24
  1523.         GENERAL ASSEMBLER DIRECTIVES
  1524.  
  1525.  
  1526.         .include  directive  is  five.  The line containing the .include
  1527.         directive will not appear in the listing file.  
  1528.  
  1529.            The  total  number  of separately specified .include files is
  1530.         unlimited as each .include file is opened and then closed during
  1531.         each pass made by the assembler.  
  1532.  
  1533.  
  1534.         1.5  INVOKING ASXXXX 
  1535.  
  1536.  
  1537.            The  ASxxxx  assemblers are command line oriented.  After the
  1538.         assembler is started, enter the option(s) and file(s) to  assem-
  1539.         ble following the 'argv:' prompt:  
  1540.  
  1541.         argv:  [-dqxgalos] file1 [file2 file3 ...  file6] 
  1542.  
  1543.         The options are:  
  1544.  
  1545.                 d       decimal listing
  1546.                 q       octal   listing
  1547.                 x       hex     listing (default)
  1548.         
  1549.                         The listing radix affects the
  1550.                         .lst, .rel, and .sym files.
  1551.         
  1552.                 g       undefined symbols made global
  1553.                 a       all user symbols made global
  1554.         
  1555.                 l       create list   output file1.lst
  1556.                 o       create object output file1.rel
  1557.                 s       create symbol output file1.sym
  1558.  
  1559.            The  file  name  for  .lst, .rel, and .sym files is the first
  1560.         file name specified in the command line.  All output  files  are
  1561.         ascii  text  files which may be edited, copied, etc.  The output
  1562.         files are the concatenation of all the input files, if files are
  1563.         to  be  assembled  independently  invoke  the assembler for each
  1564.         file.  
  1565.  
  1566.            The  .rel  file contains a radix directive so that the linker
  1567.         will use the proper conversion for this file.  Linked files  may
  1568.         have different radices.  
  1569.  
  1570.            If  the list (l) option is specified without the symbol table
  1571.         (s) option, the symbol table is placed at the end of the listing
  1572.         file.  
  1573.  
  1574.  
  1575.  
  1576.  
  1577.         THE ASSEMBLER                                          PAGE 1-25
  1578.         ERRORS
  1579.  
  1580.  
  1581.         1.6  ERRORS 
  1582.  
  1583.  
  1584.            The  ASxxxx assemblers provide limited diagnostic error codes
  1585.         during the assembly process, these errors will be noted  in  the
  1586.         listing file and printed on the stderr device.  The errors are: 
  1587.  
  1588.               (.)   This  error  is caused by an absolute direct assign-
  1589.                     ment of the current location counter 
  1590.                           . = expression (incorrect) 
  1591.                     rather than the correct 
  1592.                           . = . + expression 
  1593.  
  1594.               (a)   Indicates  a machine specific addressing or address-
  1595.                     ing mode error.  
  1596.  
  1597.               (i)   Caused  by  an  .include file error or an .if/.endif
  1598.                     mismatch.  
  1599.  
  1600.               (m)   Multiple  definitions  of  the  same label, multiple
  1601.                     .module directives, or multiple  conflicting  attri-
  1602.                     butes in an .area directive.  
  1603.  
  1604.               (o)   Directive  or  mnemonic error or the use of the .org
  1605.                     directive in a relocatable area.  
  1606.  
  1607.               (p)   Phase error:  label location changing between passes
  1608.                     2 and 3.  Normally caused by having  more  than  one
  1609.                     level of forward referencing.  
  1610.  
  1611.               (q)   Questionable syntax:  missing or improper operators,
  1612.                     terminators, or delimiters.  
  1613.  
  1614.               (r)   Relocation  error:   logic  operation attempted on a
  1615.                     relocatable term, addition of two relocatable terms,
  1616.                     subtraction  of two relocatable terms not within the
  1617.                     same programming area or external symbols.  
  1618.  
  1619.               (u)   Undefined symbol encountered during assembly.  
  1620.  
  1621.  
  1622.  
  1623.  
  1624.         THE ASSEMBLER                                          PAGE 1-26
  1625.         LISTING FILE
  1626.  
  1627.  
  1628.         1.7  LISTING FILE 
  1629.  
  1630.  
  1631.            The  (-l) option produces an ascii output listing file.  Each
  1632.         page of output contains a four line header:  
  1633.  
  1634.  
  1635.              1.  The ASxxxx program name and page number 
  1636.  
  1637.              2.  Title from a .title directive (if any) 
  1638.  
  1639.              3.  Subtitle from a .sbttl directive (if any) 
  1640.  
  1641.              4.  Blank line 
  1642.  
  1643.  
  1644.  
  1645.         Each succeeding line contains five fields:  
  1646.  
  1647.  
  1648.              1.  Error field (first three characters of line) 
  1649.  
  1650.              2.  Current location counter 
  1651.  
  1652.              3.  Generated code in byte format 
  1653.  
  1654.              4.  Source text line number 
  1655.  
  1656.              5.  Source text 
  1657.  
  1658.  
  1659.            The error field may contain upto 3 error flags indicating any
  1660.         errors encountered while assembling this line of source code.  
  1661.  
  1662.            The  current  location counter field displays the 16-bit pro-
  1663.         gram position.  This field will be in the selected radix.  
  1664.  
  1665.            The generated code follows the program location.  The listing
  1666.         radix determines the number of bytes that will be  displayed  in
  1667.         this field.  Hexidecimal listing allows six bytes of data within
  1668.         the field, decimal and octal allow four bytes within the  field.
  1669.         If more than one field of data is generated from the assembly of
  1670.         a single line of source code, then the data field is repeated on
  1671.         successive lines.  
  1672.  
  1673.            The source text line number is printed in decimal and is fol-
  1674.         lowed by the source text.  
  1675.  
  1676.            Two  special  cases  will  disable  the  listing of a line of
  1677.         source text:  
  1678.  
  1679.  
  1680.  
  1681.         THE ASSEMBLER                                          PAGE 1-27
  1682.         LISTING FILE
  1683.  
  1684.  
  1685.              1.  Source line with a .page directive is never listed.  
  1686.  
  1687.              2.  Source  line  with  a  .include  file  directive is not
  1688.                  listed unless the .include file cannot be opened.  
  1689.  
  1690.  
  1691.  
  1692.         1.8  SYMBOL TABLE FILE 
  1693.  
  1694.  
  1695.            The symbol table has two parts:  
  1696.  
  1697.              1.  The alphabetically sorted list of symbols and/or labels
  1698.                  defined or referenced in the source program.  
  1699.  
  1700.              2.  A  list of the program areas defined during assembly of
  1701.                  the source program.  
  1702.  
  1703.  
  1704.            The sorted list of symbols and/or labels contains the follow-
  1705.         ing information:  
  1706.  
  1707.              1.  Program  area  number (none if absolute value or exter-
  1708.                  nal) 
  1709.  
  1710.              2.  The symbol or label 
  1711.  
  1712.              3.  Directly assigned symbol is denoted with an (=) sign 
  1713.  
  1714.              4.  The  value of a symbol, location of a label relative to
  1715.                  the program area base address (=0), or a ****  indicat-
  1716.                  ing the symbol or label is undefined.  
  1717.  
  1718.              5.  The  characters:   G - global, R - relocatable, and X -
  1719.                  external.  
  1720.  
  1721.  
  1722.            The list of program areas provides the correspondence between
  1723.         the program area numbers and the defined program areas, the size
  1724.         of the program areas, and the area flags (attributes).  
  1725.  
  1726.  
  1727.  
  1728.  
  1729.         THE ASSEMBLER                                          PAGE 1-28
  1730.         OBJECT FILE
  1731.  
  1732.  
  1733.         1.9  OBJECT FILE 
  1734.  
  1735.  
  1736.            The  object  file is an ascii file containing the information
  1737.         needed by the linker to bind multiple object modules into a com-
  1738.         plete  loadable  memory  image.   The object module contains the
  1739.         following designators:  
  1740.  
  1741.                 [XDQ][HL]
  1742.                         X       Hexidecimal radix
  1743.                         D       Decimal radix
  1744.                         Q       Octal radix
  1745.         
  1746.                         H       Most significant byte first
  1747.                         L       Least significant byte first
  1748.         
  1749.                 H       Header 
  1750.                 M       Module
  1751.                 A       Area
  1752.                 S       Symbol
  1753.                 T       Object code
  1754.                 R       Relocation information
  1755.  
  1756.            Refer to the linker for a detailed description of each of the
  1757.         designators and the format of the information contained  in  the
  1758.         object file.  
  1759.  
  1760.  
  1761.  
  1762.  
  1763.  
  1764.  
  1765.  
  1766.  
  1767.  
  1768.  
  1769.  
  1770.  
  1771.  
  1772.  
  1773.                                     CHAPTER 2
  1774.  
  1775.                                    THE LINKER
  1776.  
  1777.  
  1778.  
  1779.  
  1780.  
  1781.         2.1  ASLINK RELOCATING LINKER 
  1782.  
  1783.  
  1784.            ASLINK is the companion linker for the ASxxxx assemblers.  
  1785.  
  1786.            The  program ASLINK is a general relocating linker performing
  1787.         the following functions:  
  1788.  
  1789.              1.  Bind multiple object modules into a single memory image 
  1790.  
  1791.              2.  Resolve inter-module symbol references 
  1792.  
  1793.              3.  Combine  code  belonging to the same area from multiple
  1794.                  object files into a single contiguous memory region 
  1795.  
  1796.              4.  Perform   byte   and   word  program  counter  relative
  1797.                  (pc or pcr) addressing calculations 
  1798.  
  1799.              5.  Define absolute symbol values at link time 
  1800.  
  1801.              6.  Define absolute area base address values at link time 
  1802.  
  1803.              7.  Produce Intel Hex or Motorola S19 output file 
  1804.  
  1805.              8.  Produce a map of the linked memory image 
  1806.  
  1807.  
  1808.  
  1809.  
  1810.  
  1811.         THE LINKER                                              PAGE 2-2
  1812.         INVOKING ASLINK
  1813.  
  1814.  
  1815.         2.2  INVOKING ASLINK 
  1816.  
  1817.  
  1818.            The  linker  may run in the command line mode or command file
  1819.         modes.  The allowed startup linker commands are:  
  1820.  
  1821.         -c/-f           command line / command file modes 
  1822.  
  1823.         -p/-n           enable/disable echo file.lnk input to stdout 
  1824.  
  1825.            If  command  line  mode is selected, all linker commands come
  1826.         from stdin, if the command file mode is  selected  the  commands
  1827.         are input from the specified file (extension must be .lnk).  
  1828.  
  1829.            The linker is started via 
  1830.  
  1831.                 ASLINK  -(cfpn) 
  1832.  
  1833.         After invoking the linker the valid options are:  
  1834.  
  1835.              1.  -i/-s   Intel Hex (file.ihx) or Motorola S19 (file.s19)
  1836.                  image output file.  
  1837.  
  1838.              2.  -m      Generate a map file (file.map).  This file con-
  1839.                  tains a list of the symbols (by area) with absolute ad-
  1840.                  dresses,  sizes  of  linked  areas,  and  other linking
  1841.                  information.  
  1842.  
  1843.              3.  -xdq    Specifies  the  number  radix  for the map file
  1844.                  (Hexidecimal, Decimal, or Octal).  
  1845.  
  1846.              4.  fileN   Files  to  be linked.  Files may be on the same
  1847.                  line as the above options or on a separate line(s)  one
  1848.                  file  per line or multiple files separated by spaces or
  1849.                  tabs.  
  1850.  
  1851.              5.  -b  area = expression (one definition per line) 
  1852.                  This  specifies  an area base address where the expres-
  1853.                  sion may contain constants and/or defined symbols  from
  1854.                  the linked files.  
  1855.  
  1856.              6.  -g  symbol = expression (one definition per line) 
  1857.                  This  specifies  the value for the symbol where the ex-
  1858.                  pression may contain constants and/or  defined  symbols
  1859.                  from the linked files.  
  1860.  
  1861.              7.  -e      or null line, terminates input to the linker.  
  1862.  
  1863.  
  1864.  
  1865.  
  1866.  
  1867.         THE LINKER                                              PAGE 2-3
  1868.         ASLINK PROCESSING
  1869.  
  1870.  
  1871.         2.3  ASLINK PROCESSING 
  1872.  
  1873.  
  1874.            The  linker  processes  the  files  in  the  order  they  are
  1875.         presented.  The first pass through the input files  is  used  to
  1876.         define  all  program  areas, the section area sizes, and symbols
  1877.         defined or referenced.  After the first pass the -b  (area  base
  1878.         address)  definitions,  if  any,  are  processed  and  the areas
  1879.         linked.  
  1880.  
  1881.            The  area  linking proceeds by first examining the area types
  1882.         ABS, CON, REL, and OVR.  Absolute areas (ABS) from separate  ob-
  1883.         ject  modules  are always overlayed and have been assembled at a
  1884.         specific address, these are not normally relocated (if a -b com-
  1885.         mand  is  used  on an absolute area the area will be relocated).
  1886.         Relative areas (normally defined as REL|CON) have a base address
  1887.         of  0x0000  as read from the object files, the -b command speci-
  1888.         fies the beginning address of the area.  All subsequent relative
  1889.         areas  will  be  concatenated  with  proceeding  relative areas.
  1890.         Where specific ordering is desired, the first linker input  file
  1891.         should  have  the area definitions in the desired order.  At the
  1892.         completion of the area linking all area  addresses  and  lengths
  1893.         have been determined.  
  1894.  
  1895.            Next  the  global symbol definitions (-g option), if any, are
  1896.         processed.  The symbol definitions have been delayed until  this
  1897.         point because the absolute addresses of all internal symbols are
  1898.         known and can be used in the expression calculations.  
  1899.  
  1900.            Before  continuing  with the linking process the symbol table
  1901.         is scanned to determine if any symbols have been referenced  but
  1902.         not defined.  Undefined symbols are listed on the stderr device.
  1903.         if a .module directive was included in the  assembled  file  the
  1904.         module  making  the reference to this undefined variable will be
  1905.         printed.  
  1906.  
  1907.            Constants  defined  as global in more than one module will be
  1908.         flagged as multiple definitions if their values are not  identi-
  1909.         cal.  
  1910.  
  1911.            After  the  preceeding  processes are complete the linker may
  1912.         output a map file (-m option).  This file provides the following
  1913.         information:  
  1914.  
  1915.              1.  Global symbol values and label absolute addresses 
  1916.  
  1917.              2.  Defined areas and there lengths 
  1918.  
  1919.              3.  Remaining undefined symbols 
  1920.  
  1921.              4.  List of modules linked 
  1922.  
  1923.  
  1924.  
  1925.         THE LINKER                                              PAGE 2-4
  1926.         ASLINK PROCESSING
  1927.  
  1928.  
  1929.              5.  List of -b and -g definitions 
  1930.  
  1931.  
  1932.  
  1933.  
  1934.            The final step of the linking process is performed during the
  1935.         second pass of the input files.  As the xxx.rel files  are  read
  1936.         the code is relocated by substituting the physical addresses for
  1937.         the referenced symbols and areas and may be output in  Intel  or
  1938.         Motorola  formats.   The  number of files linked and symbols de-
  1939.         fined/referenced is limited by the processor space available  to
  1940.         build the area/symbol lists.  
  1941.  
  1942.  
  1943.         2.4  LINKER INPUT FORMAT 
  1944.  
  1945.  
  1946.            The  linkers'  input  object file is an ascii file containing
  1947.         the information needed by the linker  to  bind  multiple  object
  1948.         modules into a complete loadable memory image.  
  1949.  
  1950.         The object module contains the following designators:  
  1951.  
  1952.                 [XDQ][HL]
  1953.                         X       Hexidecimal radix
  1954.                         D       Decimal radix
  1955.                         Q       Octal radix
  1956.         
  1957.                         H       Most significant byte first
  1958.                         L       Least significant byte first
  1959.         
  1960.                 H       Header 
  1961.                 M       Module
  1962.                 A       Area
  1963.                 S       Symbol
  1964.                 T       Object code
  1965.                 R       Relocation information
  1966.  
  1967.  
  1968.         2.4.1  Object Module Format 
  1969.  
  1970.  
  1971.            The  first  line  of  an object module contains the [XDQ][HL]
  1972.         format specifier (i.e.  XH indicates  a  hexidecimal  file  with
  1973.         most significant byte first) for the following designators.  
  1974.  
  1975.  
  1976.  
  1977.  
  1978.         THE LINKER                                              PAGE 2-5
  1979.         LINKER INPUT FORMAT
  1980.  
  1981.  
  1982.         2.4.2  Header Line 
  1983.  
  1984.                 H aa areas gg global symbols 
  1985.  
  1986.            The  header  line  specifies  the number of areas(aa) and the
  1987.         number of global symbols(gg) defined or referenced in  this  ob-
  1988.         ject module segment.  
  1989.  
  1990.  
  1991.         2.4.3  Module Line 
  1992.  
  1993.                 M name 
  1994.  
  1995.            The  module  line  specifies  the module name from which this
  1996.         header segment was assembled.  The module line will  not  appear
  1997.         if the .module directive was not used in the source program.  
  1998.  
  1999.  
  2000.         2.4.4  Symbol Line 
  2001.  
  2002.                 S string Defnnnn 
  2003.  
  2004.                         or 
  2005.  
  2006.                 S string Refnnnn 
  2007.  
  2008.            The  symbol line defines (Def) or references (Ref) the symbol
  2009.         'string' with the value nnnn.  The defined value is relative  to
  2010.         the  current area base address.  References to constants and ex-
  2011.         ternal global symbols will always appear before the  first  area
  2012.         definition.  References to external symbols will have a value of
  2013.         zero.  
  2014.  
  2015.  
  2016.         2.4.5  Area Line 
  2017.  
  2018.                 A label size ss flags ff 
  2019.  
  2020.            The  area  line  defines the area label, the size (ss) of the
  2021.         area in bytes, and the area flags (ff).  The area flags  specify
  2022.         the ABS, REL, CON, and OVR parameters:  
  2023.  
  2024.                 OVR/CON (0x04/0x00 i.e.  bit position 2) 
  2025.  
  2026.                 ABS/REL (0x08/0x00 i.e.  bit position 3) 
  2027.  
  2028.  
  2029.  
  2030.  
  2031.         THE LINKER                                              PAGE 2-6
  2032.         LINKER INPUT FORMAT
  2033.  
  2034.  
  2035.         2.4.6  T Line 
  2036.  
  2037.                 T xx xx nn nn nn nn nn ...  
  2038.  
  2039.            The  T  line contains the assembled code output by the assem-
  2040.         bler with xx xx being the offset address from the  current  area
  2041.         base address and nn being the assembled instructions and data in
  2042.         byte format.  
  2043.  
  2044.  
  2045.         2.4.7  R Line 
  2046.  
  2047.                 R 0 0 nn nn n1 n2 xx xx ...  
  2048.  
  2049.            The R line provides the relocation information to the linker.
  2050.         The nn nn value is the current area index, i.e.  which area  the
  2051.         current  relocation  references.   Relocation information is en-
  2052.         coded in groups of 4 bytes:  
  2053.  
  2054.              1.  n1 is the relocation mode 
  2055.                  1.  bit 0 word(0x00)/byte(0x01) 
  2056.                  2.  bit 1 relocatable area(0x00)/symbol(0x02) 
  2057.                  3.  bit 2 normal(0x00)/PC relative(0x04) relocation 
  2058.  
  2059.              2.  n2  is  a byte index into the corresponding (i.e.  pre-
  2060.                  ceeding) T line data (i.e.  a pointer to the data to be
  2061.                  updated by the relocation) 
  2062.  
  2063.              3.  xx xx  is the area/symbol index for the area/symbol be-
  2064.                  ing referenced.  the corresponding area/symbol is found
  2065.                  in the header area/symbol lists.  
  2066.  
  2067.  
  2068.         The groups of 4 bytes are repeated for each item requiring relo-
  2069.         cation in the preceeding T line.  
  2070.  
  2071.  
  2072.  
  2073.  
  2074.  
  2075.  
  2076.  
  2077.  
  2078.  
  2079.  
  2080.  
  2081.  
  2082.  
  2083.  
  2084.                                     CHAPTER 3
  2085.  
  2086.                            BUILDING ASXXXX AND ASLINK
  2087.  
  2088.  
  2089.  
  2090.  
  2091.            The assemblers and linker have been successfully compiled us-
  2092.         ing the DECUS C compiler (patch level  9)  with  RT-11/TSX+  and
  2093.         with Borland's Turbo C V1.5 with MS-DOS.  The only difference is
  2094.         the definition of 'VOID' (contained in asm.h  and  aslink.h)  as
  2095.         'char' in DECUS C and as 'void' in Turbo C.  
  2096.  
  2097.            The  device specific header file (i.e.  6800.h, 6801.h, etc.)
  2098.         contains the DECUS C 'BUILD' directives for generating a command
  2099.         file  to compile, assemble, and link the necessary files to pre-
  2100.         pare an executable image for a particular assembler.  
  2101.  
  2102.  
  2103.         3.1  BUILDING AN ASSEMBLER 
  2104.  
  2105.  
  2106.            The  building  of  a typical assembler (6809 for example) re-
  2107.         quires the following files:  
  2108.  
  2109.              1.  6809.H 
  2110.              2.  M09EXT.C 
  2111.              3.  M09MCH.C 
  2112.              4.  M09ADR.C 
  2113.              5.  M09PST.C 
  2114.              6.  ASM.H 
  2115.              7.  ASMAIN.C 
  2116.              8.  ASLEX.C 
  2117.              9.  ASSYM.C 
  2118.             10.  ASSUBR.C 
  2119.             11.  ASEXPR.C 
  2120.             12.  ASDATA.C 
  2121.             13.  ASLIST.C 
  2122.             14.  ASOUT.C 
  2123.  
  2124.  
  2125.            The  first  five  files are the 6809 processor dependent sec-
  2126.         tions which contain the following:  
  2127.  
  2128.  
  2129.  
  2130.         BUILDING ASXXXX AND ASLINK                              PAGE 3-2
  2131.         BUILDING AN ASSEMBLER
  2132.  
  2133.  
  2134.              1.  6809.h -  header  file  containing the machine specific
  2135.                  definitions of constants,  variables,  structures,  and
  2136.                  types 
  2137.  
  2138.              2.  m09ext -  device  description, byte order, and file ex-
  2139.                  tension information 
  2140.  
  2141.              3.  m09pst -  a  table of the assembler general directives,
  2142.                  special device directives, and assembler mnemonics with
  2143.                  associated operation codes 
  2144.  
  2145.              4.  m09mch / m09adr -  machine specific code for processing
  2146.                  the device mnemonics,  addressing  modes,  and  special
  2147.                  directives 
  2148.  
  2149.  
  2150.            The  remaining nine files provide the device independent sec-
  2151.         tions which handle the  details  of  file  input/output,  symbol
  2152.         table  generation,  program/data areas, expression analysis, and
  2153.         assembler directive processing.  
  2154.  
  2155.            The  assembler defaults to the case sensitive mode.  This may
  2156.         be altered by changing the case sensitivity flag in asm.h to 
  2157.  
  2158.                 /*
  2159.                  * Case Sensitivity Flag
  2160.                  */
  2161.                 #define CASE_SENSITIVE  0
  2162.  
  2163.            The  assemblers  and  linker should be compiled with the same
  2164.         case sensitivity option.  
  2165.  
  2166.            The  DECUS C  build files are asxxxx.bld and the Turbo C pro-
  2167.         ject files are asxxxx.prj.  
  2168.  
  2169.  
  2170.         3.2  BUILDING ASLINK 
  2171.  
  2172.  
  2173.            The building of the linker requires the following files:  
  2174.  
  2175.              1.  ASLINK.H 
  2176.              2.  LKMAIN.C 
  2177.              3.  LKLEX.C 
  2178.              4.  LKAREA.C 
  2179.              5.  LKHEAD.C 
  2180.              6.  LKSYM.C 
  2181.              7.  LKEVAL.C 
  2182.              8.  LKDATA.C 
  2183.              9.  LKLIST.C 
  2184.             10.  LKRLOC.C 
  2185.  
  2186.  
  2187.         BUILDING ASXXXX AND ASLINK                              PAGE 3-3
  2188.         BUILDING ASLINK
  2189.  
  2190.  
  2191.             11.  LKS19.C 
  2192.             12.  LKIHX.C 
  2193.  
  2194.  
  2195.            The  linker defaults to the case sensitive mode.  This may be
  2196.         altered by changing the case sensitivity flag in aslink.h to 
  2197.  
  2198.                 /*
  2199.                  * Case Sensitivity Flag
  2200.                  */
  2201.                 #define CASE_SENSITIVE  0
  2202.  
  2203.            The  linker  and  assemblers should be compiled with the same
  2204.         case sensitivity option.  
  2205.  
  2206.            The  DECUS C build file is aslink.bld and the Turbo C project
  2207.         file is aslink.prj.  
  2208.  
  2209.  
  2210.  
  2211.  
  2212.  
  2213.  
  2214.  
  2215.  
  2216.  
  2217.  
  2218.  
  2219.  
  2220.  
  2221.  
  2222.                                    APPENDIX A
  2223.  
  2224.                                 AS6800 ASSEMBLER
  2225.  
  2226.  
  2227.  
  2228.  
  2229.  
  2230.         A.1  .setdp DIRECTIVE 
  2231.  
  2232.         Format:  
  2233.  
  2234.                 .setdp [area] 
  2235.  
  2236.         The  .setdp  directive  informs  the assembler in which area the
  2237.         direct page is located.  If  the  optional  area  name  is  left
  2238.         blank, then the current area is defined as containing the direct
  2239.         page.  If  a  .setdp  directive  is  not  issued  the  assembler
  2240.         defaults the direct page to the area "_CODE".  The .setdp direc-
  2241.         tive is required when using the relocation features so that  the
  2242.         direct page space may be independently positioned at link time. 
  2243.  
  2244.            The  assembler  verifies  that  any  variable referenced as a
  2245.         direct variable is located in this area and has a value  from  0
  2246.         to 255.  
  2247.  
  2248.  
  2249.         A.2  6800 REGISTER SET 
  2250.  
  2251.         The following is a list of the 6800 registers used by AS6800:  
  2252.  
  2253.                 a,b     -       8-bit accumulators
  2254.                 x       -       index register
  2255.  
  2256.  
  2257.  
  2258.  
  2259.         AS6800 ASSEMBLER                                        PAGE A-2
  2260.         6800 INSTRUCTION SET
  2261.  
  2262.  
  2263.         A.3  6800 INSTRUCTION SET 
  2264.  
  2265.  
  2266.            The following tables list all 6800/6802/6808 mnemonics recog-
  2267.         nized by the AS6800 assembler.  The designation [] refers  to  a
  2268.         required addressing mode argument.  The following list specifies
  2269.         the format for each addressing mode supported by AS6800:  
  2270.  
  2271.                 #data           immediate data
  2272.                                 byte or word data
  2273.         
  2274.                 *dir            direct page addressing
  2275.                                 (see .setdp directive)
  2276.                                 0 <= dir <= 255 
  2277.                                 (the value of dir must be defined
  2278.                                  within the current assembly)
  2279.         
  2280.                 ,x              register indirect addressing
  2281.                                 zero offset
  2282.         
  2283.                 offset,x        register indirect addressing
  2284.                                 0 <= offset <= 255
  2285.                                 (the value of offset must be defined
  2286.                                  within the current assembly)
  2287.         
  2288.                 ext             extended addressing
  2289.         
  2290.                 label           branch label
  2291.  
  2292.         The  terms  data, dir, offset, ext, and label may all be expres-
  2293.         sions.  The terms dir, offset, and label are not allowed  to  be
  2294.         external references.  
  2295.  
  2296.            Note  that  not all addressing modes are valid with every in-
  2297.         struction, refer to the 6800 technical data for valid modes.  
  2298.  
  2299.  
  2300.         AS6800 ASSEMBLER                                        PAGE A-3
  2301.         6800 INSTRUCTION SET
  2302.  
  2303.  
  2304.         A.3.1  Inherent Instructions 
  2305.  
  2306.                 aba                     cba
  2307.                 clc                     cli
  2308.                 clv                     daa
  2309.                 des                     dex
  2310.                 ins                     inx
  2311.                 nop                     rti
  2312.                 rts                     sba
  2313.                 sec                     sei
  2314.                 sev                     swi
  2315.                 tab                     tap
  2316.                 tba                     tpa
  2317.                 tsx                     txs
  2318.                 wai
  2319.         
  2320.                 psha                    pshb
  2321.                 psh a                   psh b
  2322.                 pula                    pulb
  2323.                 pul a                   pul b
  2324.  
  2325.  
  2326.         A.3.2  Branch Instructions 
  2327.  
  2328.                 bra     label           bhi     label
  2329.                 bls     label           bcc     label
  2330.                 bhs     label           bcs     label
  2331.                 blo     label           bne     label
  2332.                 beq     label           bvc     label
  2333.                 bvs     label           bpl     label
  2334.                 bmi     label           bge     label
  2335.                 blt     label           bgt     label
  2336.                 ble     label           bsr     label
  2337.  
  2338.  
  2339.         AS6800 ASSEMBLER                                        PAGE A-4
  2340.         6800 INSTRUCTION SET
  2341.  
  2342.  
  2343.         A.3.3  Single Operand Instructions 
  2344.  
  2345.                 asla                    aslb
  2346.                 asl a                   asl b
  2347.                 asl     []
  2348.         
  2349.                 asra                    asrb
  2350.                 asr a                   asr b
  2351.                 asr     []
  2352.         
  2353.                 clra                    clrb
  2354.                 clr a                   clr b
  2355.                 clr     []
  2356.         
  2357.                 coma                    comb
  2358.                 com a                   com b
  2359.                 com     []
  2360.         
  2361.                 deca                    decb
  2362.                 dec a                   dec b
  2363.                 dec     []
  2364.         
  2365.                 inca                    incb
  2366.                 inc a                   inc b
  2367.                 inc     []
  2368.         
  2369.                 lsla                    lslb
  2370.                 lsl a                   lsl b
  2371.                 lsl     []
  2372.         
  2373.                 lsra                    lsrb
  2374.                 lsr a                   lsr b
  2375.                 lsr     []
  2376.         
  2377.                 nega                    negb
  2378.                 neg a                   neg b
  2379.                 neg     []
  2380.         
  2381.                 rola                    rolb
  2382.                 rol a                   rol b
  2383.                 rol     []
  2384.         
  2385.                 rora                    rorb
  2386.                 ror a                   ror b
  2387.                 ror     []
  2388.         
  2389.                 tsta                    tstb
  2390.                 tst a                   tst b
  2391.                 tst     []
  2392.  
  2393.  
  2394.         AS6800 ASSEMBLER                                        PAGE A-5
  2395.         6800 INSTRUCTION SET
  2396.  
  2397.  
  2398.         A.3.4  Double Operand Instructions 
  2399.  
  2400.                 adca    []              adcb    []
  2401.                 adc a   []              adc b   []
  2402.         
  2403.                 adda    []              addb    []
  2404.                 add a   []              add b   []
  2405.         
  2406.                 anda    []              andb    []
  2407.                 and a   []              and b   []
  2408.         
  2409.                 bita    []              bitb    []
  2410.                 bit a   []              bit b   []
  2411.         
  2412.                 cmpa    []              cmpb    []
  2413.                 cmp a   []              cmp b   []
  2414.         
  2415.                 eora    []              eorb    []
  2416.                 eor a   []              eor b   []
  2417.         
  2418.                 ldaa    []              ldab    []
  2419.                 lda a   []              lda b   []
  2420.         
  2421.                 oraa    []              orab    []
  2422.                 ora a   []              ora b   []
  2423.         
  2424.                 sbca    []              sbcb    []
  2425.                 sbc a   []              sbc b   []
  2426.         
  2427.                 staa    []              stab    []
  2428.                 sta a   []              sta b   []
  2429.         
  2430.                 suba    []              subb    []
  2431.                 sub a   []              sub b   []
  2432.  
  2433.  
  2434.         A.3.5  Jump and Jump to Subroutine Instructions 
  2435.  
  2436.                 jmp     []              jsr     []
  2437.  
  2438.  
  2439.  
  2440.  
  2441.         AS6800 ASSEMBLER                                        PAGE A-6
  2442.         6800 INSTRUCTION SET
  2443.  
  2444.  
  2445.         A.3.6  Long Register Instructions 
  2446.  
  2447.                 cpx     []
  2448.                 lds     []              sts     []
  2449.                 ldx     []              stx     []
  2450.  
  2451.  
  2452.  
  2453.  
  2454.  
  2455.  
  2456.  
  2457.  
  2458.  
  2459.  
  2460.  
  2461.  
  2462.  
  2463.  
  2464.                                    APPENDIX B
  2465.  
  2466.                                 AS6801 ASSEMBLER
  2467.  
  2468.  
  2469.  
  2470.  
  2471.  
  2472.         B.1  .setdp DIRECTIVE 
  2473.  
  2474.         Format:  
  2475.  
  2476.                 .setdp [area] 
  2477.  
  2478.         The  .setdp  directive  informs  the assembler in which area the
  2479.         direct page is located.  If  the  optional  area  name  is  left
  2480.         blank, then the current area is defined as containing the direct
  2481.         page.  If  a  .setdp  directive  is  not  issued  the  assembler
  2482.         defaults the direct page to the area "_CODE".  The .setdp direc-
  2483.         tive is required when using the relocation features so that  the
  2484.         direct page space may be positioned properly at link time.  
  2485.  
  2486.            The  assembler  verifies  that  any  variable referenced as a
  2487.         direct variable is located in this area and has a value  from  0
  2488.         to 255.  
  2489.  
  2490.  
  2491.         B.2  .hd6303 DIRECTIVE 
  2492.  
  2493.         Format:  
  2494.  
  2495.                 .hd6303 
  2496.  
  2497.         The  .hd6303 directive enables processing of the HD6303 specific
  2498.         mnemonics not included in  the  6801  instruction  set.   HD6303
  2499.         mnemonics  encountered  without  the  .hd6303  directive will be
  2500.         flagged with an 'o' error.  
  2501.  
  2502.  
  2503.  
  2504.  
  2505.         AS6801 ASSEMBLER                                        PAGE B-2
  2506.         6801 REGISTER SET
  2507.  
  2508.  
  2509.         B.3  6801 REGISTER SET 
  2510.  
  2511.         The following is a list of the 6801 registers used by AS6801:  
  2512.  
  2513.                 a,b     -       8-bit accumulators
  2514.                 d       -       16-bit accumulator <a:b>
  2515.                 x       -       index register
  2516.  
  2517.  
  2518.         B.4  6801 INSTRUCTION SET 
  2519.  
  2520.  
  2521.            The  following tables list all 6801/6303 mnemonics recognized
  2522.         by the AS6801 assembler.  The designation []  refers  to  a  re-
  2523.         quired  addressing  mode argument.  The following list specifies
  2524.         the format for each addressing mode supported by AS6801:  
  2525.  
  2526.                 #data           immediate data
  2527.                                 byte or word data
  2528.         
  2529.                 *dir            direct page addressing
  2530.                                 (see .setdp directive)
  2531.                                 0 <= dir <= 255 
  2532.                                 (the value of dir must be defined
  2533.                                  within the current assembly)
  2534.         
  2535.                 ,x              register indirect addressing
  2536.                                 zero offset
  2537.         
  2538.                 offset,x        register indirect addressing
  2539.                                 0 <= offset <= 255
  2540.                                 (the value of offset must be defined
  2541.                                  within the current assembly)
  2542.         
  2543.                 ext             extended addressing
  2544.         
  2545.                 label           branch label
  2546.  
  2547.         The  terms  data, dir, offset, ext, and label may all be expres-
  2548.         sions.  The terms dir, offset, and label are not allowed  to  be
  2549.         external references.  
  2550.  
  2551.            Note  that  not all addressing modes are valid with every in-
  2552.         struction, refer to  the  6801/6303  technical  data  for  valid
  2553.         modes.  
  2554.  
  2555.  
  2556.         AS6801 ASSEMBLER                                        PAGE B-3
  2557.         6801 INSTRUCTION SET
  2558.  
  2559.  
  2560.         B.4.1  Inherent Instructions 
  2561.  
  2562.                 aba             abx
  2563.                 cba             clc
  2564.                 cli             clv
  2565.                 daa             des
  2566.                 dex             ins
  2567.                 inx             mul
  2568.                 nop             rti
  2569.                 rts             sba
  2570.                 sec             sei
  2571.                 sev             swi
  2572.                 tab             tap
  2573.                 tba             tpa
  2574.                 tsx             txs
  2575.                 wai
  2576.  
  2577.  
  2578.         B.4.2  Branch Instructions 
  2579.  
  2580.                 bra     label           brn     label
  2581.                 bhi     label           bls     label
  2582.                 bcc     label           bhs     label
  2583.                 bcs     label           blo     label
  2584.                 bne     label           beq     label
  2585.                 bvc     label           bvs     label
  2586.                 bpl     label           bmi     label
  2587.                 bge     label           blt     label
  2588.                 bgt     label           ble     label
  2589.                 bsr     label
  2590.  
  2591.  
  2592.         B.4.3  Single Operand Instructions 
  2593.  
  2594.                 asla            aslb            asld
  2595.                 asl a           asl b           asl d
  2596.                 asl     []
  2597.         
  2598.                 asra            asrb
  2599.                 asr a           asr b
  2600.                 asr     []
  2601.         
  2602.                 clra            clrb
  2603.                 clr a           clr b
  2604.                 clr     []
  2605.         
  2606.                 coma            comb
  2607.                 com a           com b
  2608.                 com     []
  2609.         
  2610.                 deca            decb
  2611.                 dec a           dec b
  2612.  
  2613.  
  2614.         AS6801 ASSEMBLER                                        PAGE B-4
  2615.         6801 INSTRUCTION SET
  2616.  
  2617.  
  2618.                 dec     []
  2619.         
  2620.                 eora            eorb
  2621.                 eor a           eor b
  2622.                 eor     []
  2623.         
  2624.                 inca            incb
  2625.                 inc a           inc b
  2626.                 inc     []
  2627.         
  2628.                 lsla            lslb            lsld
  2629.                 lsl a           lsl b           lsl d
  2630.                 lsl     []
  2631.         
  2632.                 lsra            lsrb            lsrd
  2633.                 lsr a           lsr b           lsr d
  2634.                 lsr     []
  2635.         
  2636.                 nega            negb
  2637.                 neg a           neg b
  2638.                 neg     []
  2639.         
  2640.                 psha            pshb            pshx
  2641.                 psh a           psh b           psh x
  2642.         
  2643.                 pula            pulb            pulx
  2644.                 pul a           pul b           pul x
  2645.         
  2646.                 rola            rolb
  2647.                 rol a           rol b
  2648.                 rol     []
  2649.         
  2650.                 rora            rorb
  2651.                 ror a           ror b
  2652.                 ror     []
  2653.         
  2654.                 tsta            tstb
  2655.                 tst a           tst b
  2656.                 tst     []
  2657.  
  2658.  
  2659.         AS6801 ASSEMBLER                                        PAGE B-5
  2660.         6801 INSTRUCTION SET
  2661.  
  2662.  
  2663.         B.4.4  Double Operand Instructions 
  2664.  
  2665.                 adca    []      adcb    []
  2666.                 adc a   []      adc b   []
  2667.         
  2668.                 adda    []      addb    []      addd    []
  2669.                 add a   []      add b   []      add d   []
  2670.         
  2671.                 anda    []      andb    []
  2672.                 and a   []      and b   []
  2673.         
  2674.                 bita    []      bitb    []
  2675.                 bit a   []      bit b   []
  2676.         
  2677.                 cmpa    []      cmpb    []
  2678.                 cmp a   []      cmp b   []
  2679.         
  2680.                 ldaa    []      ldab    []
  2681.                 lda a   []      lda b   []
  2682.         
  2683.                 oraa    []      orab    []
  2684.                 ora a   []      ora b   []
  2685.         
  2686.                 sbca    []      sbcb    []
  2687.                 sbc a   []      sbc b   []
  2688.         
  2689.                 staa    []      stab    []
  2690.                 sta a   []      sta b   []
  2691.         
  2692.                 suba    []      subb    []      subd    []
  2693.                 sub a   []      sub b   []      sub d   []
  2694.  
  2695.  
  2696.         B.4.5  Jump and Jump to Subroutine Instructions 
  2697.  
  2698.                 jmp     []      jsr     []
  2699.  
  2700.  
  2701.         B.4.6  Long Register Instructions 
  2702.  
  2703.                 cpx     []      ldd     []
  2704.                 lds     []      ldx     []
  2705.                 std     []      sts     []
  2706.                 stx     []
  2707.  
  2708.  
  2709.         AS6801 ASSEMBLER                                        PAGE B-6
  2710.         6801 INSTRUCTION SET
  2711.  
  2712.  
  2713.         B.4.7  6303 Specific Instructions 
  2714.  
  2715.                 aim     #data, []       eim     #data, []
  2716.                 oim     #data, []       tim     #data, []
  2717.         
  2718.                 xgdx            slp
  2719.  
  2720.  
  2721.  
  2722.  
  2723.  
  2724.  
  2725.  
  2726.  
  2727.  
  2728.  
  2729.  
  2730.  
  2731.  
  2732.  
  2733.                                    APPENDIX C
  2734.  
  2735.                                 AS6804 ASSEMBLER
  2736.  
  2737.  
  2738.  
  2739.  
  2740.            Because  the  6804  has  only a 256 byte ram space the .setdp
  2741.         directive is not supported.  
  2742.  
  2743.  
  2744.         C.1  6804 REGISTER SET 
  2745.  
  2746.         The following is a list of the 6804 registers used by AS6804:  
  2747.  
  2748.                 x,y     -       index registers
  2749.  
  2750.  
  2751.         C.2  6804 INSTRUCTION SET 
  2752.  
  2753.  
  2754.            The  following  tables  list all 6804 mnemonics recognized by
  2755.         the AS6804 assembler.  The designation [] refers to  a  required
  2756.         addressing  mode  argument.   The  following  list specifies the
  2757.         format for each addressing mode supported by AS6804:  
  2758.  
  2759.                 #data           immediate data
  2760.                                 byte or word data
  2761.         
  2762.                 ,x              register indirect addressing
  2763.         
  2764.                 dir             direct addressing
  2765.                                 0 <= dir <= 255
  2766.         
  2767.                 ext             extended addressing
  2768.         
  2769.                 label           branch label
  2770.  
  2771.         The  terms data, dir, and ext may be expressions.  The terms dir
  2772.         and label are not allowed to be external references.  
  2773.  
  2774.            Note  that  not all addressing modes are valid with every in-
  2775.         struction, refer to the 6804 technical data for valid modes.  
  2776.  
  2777.  
  2778.         AS6804 ASSEMBLER                                        PAGE C-2
  2779.         6804 INSTRUCTION SET
  2780.  
  2781.  
  2782.         C.2.1  Inherent Instructions 
  2783.  
  2784.                 coma            decx
  2785.                 decy            incx
  2786.                 incy            rola
  2787.                 rti             rts
  2788.                 stop            tax
  2789.                 tay             txa
  2790.                 tya             wait
  2791.  
  2792.  
  2793.         C.2.2  Branch Instructions 
  2794.  
  2795.                 bne     label           beq     label
  2796.                 bcc     label           bcs     label
  2797.  
  2798.  
  2799.         C.2.3  Single Operand Instructions 
  2800.  
  2801.                 add     []
  2802.                 and     []
  2803.                 cmp     []
  2804.                 dec     []
  2805.                 inc     []
  2806.                 lda     []
  2807.                 sta     []
  2808.                 sub     []
  2809.  
  2810.  
  2811.         C.2.4  Jump and Jump to Subroutine Instructions 
  2812.  
  2813.                 jsr     []
  2814.                 jmp     []
  2815.  
  2816.  
  2817.         C.2.5  Bit Test Instructions 
  2818.  
  2819.                 brclr   #data,[],label
  2820.                 brset   #data,[],label
  2821.         
  2822.                 bclr    #label,[]
  2823.                 bset    #label,[]
  2824.  
  2825.  
  2826.  
  2827.  
  2828.         AS6804 ASSEMBLER                                        PAGE C-3
  2829.         6804 INSTRUCTION SET
  2830.  
  2831.  
  2832.         C.2.6  Load Immediate data Instruction 
  2833.  
  2834.                 mvi     [],#data
  2835.  
  2836.  
  2837.         C.2.7  6804 Derived Instructions 
  2838.  
  2839.                 asla
  2840.                 bam     label
  2841.                 bap     label
  2842.                 bxmi    label
  2843.                 bxpl    label
  2844.                 bymi    label
  2845.                 bypl    label
  2846.                 clra
  2847.                 clrx
  2848.                 clry
  2849.                 deca
  2850.                 decx
  2851.                 decy
  2852.                 inca
  2853.                 incx
  2854.                 incy
  2855.                 ldxi    #data
  2856.                 ldyi    #data
  2857.                 nop
  2858.                 tax
  2859.                 tay
  2860.                 txa
  2861.                 tya
  2862.  
  2863.  
  2864.  
  2865.  
  2866.  
  2867.  
  2868.  
  2869.  
  2870.  
  2871.  
  2872.  
  2873.  
  2874.  
  2875.  
  2876.                                    APPENDIX D
  2877.  
  2878.                                 AS6805 ASSEMBLER
  2879.  
  2880.  
  2881.  
  2882.  
  2883.  
  2884.         D.1  .setdp DIRECTIVE 
  2885.  
  2886.         Format:  
  2887.  
  2888.                 .setdp [area] 
  2889.  
  2890.         The  .setdp  directive  informs  the assembler in which area the
  2891.         direct page is located.  If  the  optional  area  name  is  left
  2892.         blank, then the current area is defined as containing the direct
  2893.         page.  If  a  .setdp  directive  is  not  issued  the  assembler
  2894.         defaults the direct page to the area "_CODE".  The .setdp direc-
  2895.         tive is required when using the relocation features so that  the
  2896.         direct page space may be positioned properly at link time.  
  2897.  
  2898.            The  assembler  verifies  that  any  variable referenced as a
  2899.         direct variable is located in this area and has a value  from  0
  2900.         to 255.  
  2901.  
  2902.  
  2903.         D.2  6805 REGISTER SET 
  2904.  
  2905.         The following is a list of the 6805 registers used by AS6805:  
  2906.  
  2907.                 a       -       8-bit accumulator
  2908.                 x       -       index register
  2909.  
  2910.  
  2911.  
  2912.  
  2913.         AS6805 ASSEMBLER                                        PAGE D-2
  2914.         6805 INSTRUCTION SET
  2915.  
  2916.  
  2917.         D.3  6805 INSTRUCTION SET 
  2918.  
  2919.  
  2920.            The  following  tables  list all 6805 mnemonics recognized by
  2921.         the AS6805 assembler.  The designation [] refers to  a  required
  2922.         addressing  mode  argument.   The  following  list specifies the
  2923.         format for each addressing mode supported by AS6805:  
  2924.  
  2925.                 #data           immediate data
  2926.                                 byte or word data
  2927.         
  2928.                 *dir            direct page addressing
  2929.                                 (see .setdp directive)
  2930.                                 0 <= dir <= 255 
  2931.                                 (the value of dir must be defined
  2932.                                  within the current assembly)
  2933.         
  2934.                 ,x              register indirect addressing
  2935.                                 zero offset
  2936.         
  2937.                 offset,x        register indirect addressing
  2938.                                   0 <= offset <= 255   --- byte mode
  2939.                                 256 <= offset <= 65535 --- word mode
  2940.                                 (an externally defined offset uses the
  2941.                                  word mode)
  2942.         
  2943.                 ext             extended addressing
  2944.         
  2945.                 label           branch label
  2946.  
  2947.         The  terms  data,  dir,  offset, and ext may all be expressions.
  2948.         The terms dir and label are not allowed to be an external refer-
  2949.         ence.  
  2950.  
  2951.            Note  that  not all addressing modes are valid with every in-
  2952.         struction, refer to the 6805 technical data for valid modes.  
  2953.  
  2954.  
  2955.         D.3.1  Control Instructions 
  2956.  
  2957.                 clc             cli
  2958.                 nop             rsp
  2959.                 rti             rts
  2960.                 sec             sei
  2961.                 stop            swi
  2962.                 tax             txa
  2963.                 wait
  2964.  
  2965.  
  2966.  
  2967.  
  2968.         AS6805 ASSEMBLER                                        PAGE D-3
  2969.         6805 INSTRUCTION SET
  2970.  
  2971.  
  2972.         D.3.2  Bit Manipulation Instructions 
  2973.  
  2974.                 brset   #data,*dir,label
  2975.                 brclr   #data,*dir,label
  2976.         
  2977.                 bset    #data,*dir
  2978.                 bclr    #data,*dir
  2979.  
  2980.  
  2981.         D.3.3  Branch Instructions 
  2982.  
  2983.                 bra     label           brn     label
  2984.                 bhi     label           bls     label
  2985.                 bcc     label           bcs     label
  2986.                 bne     label           beq     label
  2987.                 bhcc    label           bhcs    label
  2988.                 bpl     label           bmi     label
  2989.                 bmc     label           bms     label
  2990.                 bil     label           bih     label
  2991.                 bsr     label
  2992.  
  2993.  
  2994.         AS6805 ASSEMBLER                                        PAGE D-4
  2995.         6805 INSTRUCTION SET
  2996.  
  2997.  
  2998.         D.3.4  Read-Modify-Write Instructions 
  2999.  
  3000.                 nega            negx
  3001.                 neg     []
  3002.         
  3003.                 coma            comx
  3004.                 com     []
  3005.         
  3006.                 lsra            lsrx
  3007.                 lsr     []
  3008.         
  3009.                 rora            rorx
  3010.                 ror     []
  3011.         
  3012.                 asra            asrx
  3013.                 asr     []
  3014.         
  3015.                 lsla            lslx
  3016.                 lsl     []
  3017.         
  3018.                 rola            rolx
  3019.                 rol     []
  3020.         
  3021.                 deca            decx
  3022.                 dec     []
  3023.         
  3024.                 inca            incx
  3025.                 inc     []
  3026.         
  3027.                 tsta            tstx
  3028.                 tst     []
  3029.         
  3030.                 clra            clrx
  3031.                 clr     []
  3032.  
  3033.  
  3034.         D.3.5  Register\Memory Instructions 
  3035.  
  3036.                 sub     []              cmp     []
  3037.                 sbc     []              cpx     []
  3038.                 and     []              bit     []
  3039.                 lda     []              sta     []
  3040.                 eor     []              adc     []
  3041.                 ora     []              add     []
  3042.                 ldx     []              stx     []
  3043.  
  3044.  
  3045.         AS6805 ASSEMBLER                                        PAGE D-5
  3046.         6805 INSTRUCTION SET
  3047.  
  3048.  
  3049.         D.3.6  Jump and Jump to Subroutine Instructions 
  3050.  
  3051.                 jmp     []              jsr     []
  3052.  
  3053.  
  3054.  
  3055.  
  3056.  
  3057.  
  3058.  
  3059.  
  3060.  
  3061.  
  3062.  
  3063.  
  3064.  
  3065.  
  3066.                                    APPENDIX E
  3067.  
  3068.                                 AS6809 ASSEMBLER
  3069.  
  3070.  
  3071.  
  3072.  
  3073.  
  3074.         E.1  .setdp DIRECTIVE 
  3075.  
  3076.         Format:  
  3077.  
  3078.                 .setdp base [,area] 
  3079.  
  3080.         The  .setdp  directive informs the assembler the base address of
  3081.         the direct page region (the low-order 8-bits of the base address
  3082.         are  cleared)  and  specifies  the direct page area.  If the op-
  3083.         tional area name is left blank, then the current area is defined
  3084.         as containing the direct page.  If a .setdp directive is not is-
  3085.         sued the assembler defaults the direct page to the area "_CODE".
  3086.         The  .setdp  directive  is  required  when  using the relocation
  3087.         features so  that  the  direct  page  space  may  be  positioned
  3088.         properly at link time.  
  3089.  
  3090.            The  assembler  verifies  that  any  variable referenced as a
  3091.         direct variable is located in this area and has a value  from  0
  3092.         to  255.   It  is  the programmers responsibility to load the dp
  3093.         register with the correct page segment.  
  3094.  
  3095.  
  3096.         E.2  6809 REGISTER SET 
  3097.  
  3098.         The following is a list of the 6809 registers used by AS6809:  
  3099.  
  3100.                 a,b     -       8-bit accumulators
  3101.                 d       -       16-bit accumulator <a:b>
  3102.                 x,y     -       index registers
  3103.                 s,u     -       stack pointers
  3104.                 pc      -       program counter
  3105.                 cc      -       condition code
  3106.                 dp      -       direct page
  3107.  
  3108.  
  3109.  
  3110.  
  3111.         AS6809 ASSEMBLER                                        PAGE E-2
  3112.         6809 INSTRUCTION SET
  3113.  
  3114.  
  3115.         E.3  6809 INSTRUCTION SET 
  3116.  
  3117.  
  3118.            The  following  tables  list all 6809 mnemonics recognized by
  3119.         the AS6809 assembler.  The designation [] refers to  a  required
  3120.         addressing  mode  argument.   The  following  list specifies the
  3121.         format for each addressing mode supported by AS6809:  
  3122.  
  3123.                 #data           immediate data
  3124.                                 byte or word data
  3125.         
  3126.                 *dir            direct page addressing
  3127.                                 (see .setdp directive)
  3128.                                 0 <= dir <= 255 
  3129.                                 (the value of dir must be defined
  3130.                                  within the current assembly)
  3131.         
  3132.                 label           branch label
  3133.         
  3134.                 r,r1,r2         registers
  3135.                                 cc,a,b,d,dp,x,y,s,u,pc
  3136.         
  3137.                 ,-x     ,--x    register indexed
  3138.                                 autodecrement
  3139.         
  3140.                 ,x+     ,x++    register indexed
  3141.                                 autoincrement
  3142.         
  3143.                 ,x              register indexed addressing
  3144.                                 zero offset
  3145.         
  3146.                 offset,x        register indexed addressing
  3147.                                    -16 <= offset <= 15    ---  5-bit
  3148.                                   -128 <= offset <= -17   ---  8-bit
  3149.                                     16 <= offset <= 127   ---  8-bit
  3150.                                 -32768 <= offset <= -129  --- 16-bit
  3151.                                    128 <= offset <= 32767 --- 16-bit
  3152.                                 (external definition of offset
  3153.                                  uses 16-bit mode)
  3154.         
  3155.                 a,x             accumulator offset indexed addressing
  3156.         
  3157.                 ext             extended addressing
  3158.         
  3159.                 ext,pc          pc addressing ( pc <- pc + ext )
  3160.         
  3161.                 ext,pcr         pc relative addressing
  3162.                                 
  3163.                 [,--x]          register indexed indirect
  3164.                                 autodecrement
  3165.         
  3166.                 [,x++]          register indexed indirect
  3167.  
  3168.  
  3169.         AS6809 ASSEMBLER                                        PAGE E-3
  3170.         6809 INSTRUCTION SET
  3171.  
  3172.  
  3173.                                 autoincrement
  3174.         
  3175.                 [,x]            register indexed indirect addressing
  3176.                                 zero offset
  3177.         
  3178.                 [offset,x]      register indexed indirect addressing
  3179.                                   -128 <= offset <= 127   ---  8-bit
  3180.                                 -32768 <= offset <= -129  --- 16-bit
  3181.                                    128 <= offset <= 32767 --- 16-bit
  3182.                                 (external definition of offset
  3183.                                  uses 16-bit mode)
  3184.         
  3185.                 [a,x]           accumulator offset indexed
  3186.                                 indirect addressing
  3187.         
  3188.                 [ext]           extended indirect addressing
  3189.         
  3190.                 [ext,pc]        pc indirect addressing
  3191.                                 ( [pc <- pc + ext] )
  3192.         
  3193.                 [ext,pcr]       pc relative indirect addressing
  3194.  
  3195.         The  terms  data, dir, label, offset, and ext may all be expres-
  3196.         sions.  The terms dir and a short label are not allowed to be an
  3197.         external reference.  
  3198.  
  3199.            Note  that  not all addressing modes are valid with every in-
  3200.         struction, refer to the 6809 technical data for valid modes.  
  3201.  
  3202.  
  3203.         AS6809 ASSEMBLER                                        PAGE E-4
  3204.         6809 INSTRUCTION SET
  3205.  
  3206.  
  3207.         E.3.1  Inherent Instructions 
  3208.  
  3209.                 abx             daa
  3210.                 mul             nop
  3211.                 rti             rts
  3212.                 sex             swi
  3213.                 swi1            swi2
  3214.                 swi3            sync
  3215.  
  3216.  
  3217.         E.3.2  Short Branch Instructions 
  3218.  
  3219.                 bcc     label           bcs     label
  3220.                 beq     label           bge     label
  3221.                 bgt     label           bhi     label
  3222.                 bhis    label           bhs     label
  3223.                 ble     label           blo     label
  3224.                 blos    label           bls     label
  3225.                 blt     label           bmi     label
  3226.                 bne     label           bpl     label
  3227.                 bra     label           brn     label
  3228.                 bvc     label           bvs     label
  3229.                 bsr     label
  3230.  
  3231.  
  3232.         E.3.3  Long Branch Instructions 
  3233.  
  3234.                 lbcc    label           lbcs    label
  3235.                 lbeq    label           lbge    label
  3236.                 lbgt    label           lbhi    label
  3237.                 lbhis   label           lbhs    label
  3238.                 lble    label           lblo    label
  3239.                 lblos   label           lbls    label
  3240.                 lblt    label           lbmi    label
  3241.                 lbne    label           lbpl    label
  3242.                 lbra    label           lbrn    label
  3243.                 lbvc    label           lbvs    label
  3244.                 lbsr    label
  3245.  
  3246.  
  3247.         AS6809 ASSEMBLER                                        PAGE E-5
  3248.         6809 INSTRUCTION SET
  3249.  
  3250.  
  3251.         E.3.4  Single Operand Instructions 
  3252.  
  3253.                 asla            aslb
  3254.                 asl     []
  3255.         
  3256.                 asra            asrb
  3257.                 asr     []
  3258.         
  3259.                 clra            clrb
  3260.                 clr     []
  3261.         
  3262.                 coma            comb
  3263.                 com     []
  3264.         
  3265.                 deca            decb
  3266.                 dec     []
  3267.         
  3268.                 inca            incb
  3269.                 inc     []
  3270.         
  3271.                 lsla            lslb
  3272.                 lsl     []
  3273.         
  3274.                 lsra            lsrb
  3275.                 lsr     []
  3276.         
  3277.                 nega            negb
  3278.                 neg     []
  3279.         
  3280.                 rola            rolb
  3281.                 rol     []
  3282.         
  3283.                 rora            rorb
  3284.                 ror     []
  3285.         
  3286.                 tsta            tstb
  3287.                 tst     []
  3288.  
  3289.  
  3290.         AS6809 ASSEMBLER                                        PAGE E-6
  3291.         6809 INSTRUCTION SET
  3292.  
  3293.  
  3294.         E.3.5  Double Operand Instructions 
  3295.  
  3296.                 adca    []              adcb    []
  3297.         
  3298.                 adda    []              addb    []
  3299.         
  3300.                 anda    []              andb    []
  3301.         
  3302.                 bita    []              bitb    []
  3303.         
  3304.                 cmpa    []              cmpb    []
  3305.         
  3306.                 eora    []              eorb    []
  3307.         
  3308.                 lda     []              ldb     []
  3309.         
  3310.                 ora     []              orb     []
  3311.         
  3312.                 sbca    []              sbcb    []
  3313.         
  3314.                 sta     []              stb     []
  3315.         
  3316.                 suba    []              subb    []
  3317.  
  3318.  
  3319.         E.3.6  D-register Instructions 
  3320.  
  3321.                 addd    []              subd    []
  3322.                 cmpd    []              ldd     []
  3323.                 std     []
  3324.  
  3325.  
  3326.         E.3.7  Index/Stack Register Instructions 
  3327.  
  3328.                 cmps    []              cmpu    []
  3329.                 cmpx    []              cmpy    []
  3330.         
  3331.                 lds     []              ldu     []
  3332.                 ldx     []              ldy     []
  3333.         
  3334.                 leas    []              leau    []
  3335.                 leax    []              leay    []
  3336.         
  3337.                 sts     []              stu     []
  3338.                 stx     []              sty     []
  3339.         
  3340.                 pshs    r               pshu    r
  3341.                 puls    r               pulu    r
  3342.  
  3343.  
  3344.         AS6809 ASSEMBLER                                        PAGE E-7
  3345.         6809 INSTRUCTION SET
  3346.  
  3347.  
  3348.         E.3.8  Jump and Jump to Subroutine Instructions 
  3349.  
  3350.                 jmp     []              jsr     []
  3351.  
  3352.  
  3353.         E.3.9  Register - Register Instructions 
  3354.  
  3355.                 exg     r1,r2           tfr     r1,r2
  3356.  
  3357.  
  3358.         E.3.10  Condition Code Register Instructions 
  3359.  
  3360.                 andcc   #data           orcc    #data
  3361.                 cwai    #data
  3362.  
  3363.  
  3364.         E.3.11  6800 Compatibility Instructions 
  3365.  
  3366.                 aba             cba
  3367.                 clc             cli
  3368.                 clv             des
  3369.                 dex             ins
  3370.                 inx
  3371.                 ldaa    []      ldab    []
  3372.                 oraa    []      orab    []
  3373.                 psha            pshb
  3374.                 pula            pulb
  3375.                 sba             sec
  3376.                 sei             sev
  3377.                 staa    []      stab    []
  3378.                 tab             tap
  3379.                 tba             tpa
  3380.                 tsx             txs
  3381.                 wai
  3382.  
  3383.  
  3384.  
  3385.  
  3386.  
  3387.  
  3388.  
  3389.  
  3390.  
  3391.  
  3392.  
  3393.  
  3394.  
  3395.  
  3396.                                    APPENDIX F
  3397.  
  3398.                                 AS6811 ASSEMBLER
  3399.  
  3400.  
  3401.  
  3402.  
  3403.  
  3404.         F.1  .setdp DIRECTIVE 
  3405.  
  3406.         Format:  
  3407.  
  3408.                 .setdp [area] 
  3409.  
  3410.         The  .setdp  directive  informs  the assembler in which area the
  3411.         direct page is located.  If  the  optional  area  name  is  left
  3412.         blank, then the current area is defined as containing the direct
  3413.         page.  If  a  .setdp  directive  is  not  issued  the  assembler
  3414.         defaults the direct page to the area "_CODE".  The .setdp direc-
  3415.         tive is required when using the relocation features so that  the
  3416.         direct page space may be positioned properly at link time.  
  3417.  
  3418.            The  assembler  verifies  that  any  variable referenced as a
  3419.         direct variable is located in this area and has a value  from  0
  3420.         to 255.  
  3421.  
  3422.  
  3423.         F.2  6811 REGISTER SET 
  3424.  
  3425.         The following is a list of the 6811 registers used by AS6811:  
  3426.  
  3427.                 a,b     -       8-bit accumulators
  3428.                 d       -       16-bit accumulator <a:b>
  3429.                 x,y     -       index registers
  3430.  
  3431.  
  3432.  
  3433.  
  3434.         AS6811 ASSEMBLER                                        PAGE F-2
  3435.         6811 INSTRUCTION SET
  3436.  
  3437.  
  3438.         F.3  6811 INSTRUCTION SET 
  3439.  
  3440.  
  3441.            The  following  tables  list all 6811 mnemonics recognized by
  3442.         the AS6811 assembler.  The designation [] refers to  a  required
  3443.         addressing  mode  argument.   The  following  list specifies the
  3444.         format for each addressing mode supported by AS6811:  
  3445.  
  3446.                 #data           immediate data
  3447.                                 byte or word data
  3448.         
  3449.                 *dir            direct page addressing
  3450.                                 (see .setdp directive)
  3451.                                 0 <= dir <= 255 
  3452.                                 (the value of dir must be defined
  3453.                                  within the current assembly)
  3454.         
  3455.                 ,x              register indirect addressing
  3456.                                 zero offset
  3457.         
  3458.                 offset,x        register indirect addressing
  3459.                                 0 <= offset <= 255
  3460.                                 (the value of offset must be defined
  3461.                                  within the current assembly)
  3462.         
  3463.                 ext             extended addressing
  3464.         
  3465.                 label           branch label
  3466.  
  3467.         The  terms  data,  dir,  offset, and ext may all be expressions.
  3468.         The terms dir, offset, and label are not allowed to be  external
  3469.         references.  
  3470.  
  3471.            Note  that  not all addressing modes are valid with every in-
  3472.         struction, refer to the 6811 technical data for valid modes.  
  3473.  
  3474.  
  3475.         AS6811 ASSEMBLER                                        PAGE F-3
  3476.         6811 INSTRUCTION SET
  3477.  
  3478.  
  3479.         F.3.1  Inherent Instructions 
  3480.  
  3481.                 aba             abx
  3482.                 aby             cba
  3483.                 clc             cli
  3484.                 clv             daa
  3485.                 des             dex
  3486.                 dey             fdiv
  3487.                 idiv            ins
  3488.                 inx             iny
  3489.                 mul             nop
  3490.                 rti             rts
  3491.                 sba             sec
  3492.                 sei             sev
  3493.                 stop            swi
  3494.                 tab             tap
  3495.                 tba             tpa
  3496.                 tsx             txs
  3497.                 wai             xgdx
  3498.                 xgdy
  3499.         
  3500.                 psha            pshb
  3501.                 psh a           psh b
  3502.                 pshx            pshy
  3503.                 psh x           psh y
  3504.         
  3505.                 pula            pulb
  3506.                 pul a           pul b
  3507.                 pulx            puly
  3508.                 pul x           pul y
  3509.  
  3510.  
  3511.         F.3.2  Branch Instructions 
  3512.  
  3513.                 bra     label           brn     label
  3514.                 bhi     label           bls     label
  3515.                 bcc     label           bhs     label
  3516.                 bcs     label           blo     label
  3517.                 bne     label           beq     label
  3518.                 bvc     label           bvs     label
  3519.                 bpl     label           bmi     label
  3520.                 bge     label           blt     label
  3521.                 bgt     label           ble     label
  3522.                 bsr     label
  3523.  
  3524.  
  3525.         AS6811 ASSEMBLER                                        PAGE F-4
  3526.         6811 INSTRUCTION SET
  3527.  
  3528.  
  3529.         F.3.3  Single Operand Instructions 
  3530.  
  3531.                 asla            aslb            asld
  3532.                 asl a           asl b           asl d
  3533.                 asl     []
  3534.         
  3535.                 asra            asrb
  3536.                 asr a           asr b
  3537.                 asr     []
  3538.         
  3539.                 clra            clrb
  3540.                 clr a           clr b
  3541.                 clr     label
  3542.         
  3543.                 coma            comb
  3544.                 com a           com b
  3545.                 com     []
  3546.         
  3547.                 deca            decb
  3548.                 dec a           dec b
  3549.                 dec     []
  3550.         
  3551.                 inca            incb
  3552.                 inc a           inc b
  3553.                 inc     []
  3554.         
  3555.                 lsla            lslb            lsld
  3556.                 lsl a           lsl b           lsl d
  3557.                 lsl     []
  3558.         
  3559.                 lsra            lsrb            lsrd
  3560.                 lsr a           lsr b           lsr d
  3561.                 lsr     []
  3562.         
  3563.                 nega            negb
  3564.                 neg a           neg b
  3565.                 neg     []
  3566.         
  3567.                 rola            rolb
  3568.                 rol a           rol b
  3569.                 rol     []
  3570.         
  3571.                 rora            rorb
  3572.                 ror a           ror b
  3573.                 ror     []
  3574.         
  3575.                 tsta            tstb
  3576.                 tst a           tst b
  3577.                 tst     []
  3578.  
  3579.  
  3580.         AS6811 ASSEMBLER                                        PAGE F-5
  3581.         6811 INSTRUCTION SET
  3582.  
  3583.  
  3584.         F.3.4  Double Operand Instructions 
  3585.  
  3586.                 adca    []              adcb    []
  3587.                 adc a   []              adc b   []
  3588.         
  3589.                 adda    []      addb    []      addd    []
  3590.                 add a   []      add b   []      add d   []
  3591.         
  3592.                 anda    []              andb    []
  3593.                 and a   []              and b   []
  3594.         
  3595.                 bita    []              bitb    []
  3596.                 bit a   []              bit b   []
  3597.         
  3598.                 cmpa    []              cmpb    []
  3599.                 cmp a   []              cmp b   []
  3600.         
  3601.                 eora    []              eorb    []
  3602.                 eor a   []              eor b   []
  3603.         
  3604.                 ldaa    []              ldab    []
  3605.                 lda a   []              lda b   []
  3606.         
  3607.                 oraa    []              orab    []
  3608.                 ora a   []              ora b   []
  3609.         
  3610.                 sbca    []              sbcb    []
  3611.                 sbc a   []              sbc b   []
  3612.         
  3613.                 staa    []              stab    []
  3614.                 sta a   []              sta b   []
  3615.         
  3616.                 suba    []      subb    []      subd    []
  3617.                 sub a   []      sub b   []      sub d   []
  3618.  
  3619.  
  3620.         F.3.5  Bit Manupulation Instructions 
  3621.  
  3622.                 bclr    [],#data
  3623.                 bset    [],#data
  3624.         
  3625.                 brclr   [],#data,label
  3626.                 brset   [],#data,label
  3627.  
  3628.  
  3629.  
  3630.  
  3631.         AS6811 ASSEMBLER                                        PAGE F-6
  3632.         6811 INSTRUCTION SET
  3633.  
  3634.  
  3635.         F.3.6  Jump and Jump to Subroutine Instructions 
  3636.  
  3637.                 jmp     []              jsr     []
  3638.  
  3639.  
  3640.         F.3.7  Long Register Instructions 
  3641.  
  3642.                 cpx     []              cpy     []
  3643.         
  3644.                 ldd     []              lds     []
  3645.                 ldx     []              ldy     []
  3646.         
  3647.                 std     []              sts     []
  3648.                 stx     []              sty     []
  3649.  
  3650.  
  3651.  
  3652.  
  3653.  
  3654.  
  3655.  
  3656.  
  3657.  
  3658.  
  3659.  
  3660.  
  3661.  
  3662.  
  3663.                                    APPENDIX G
  3664.  
  3665.                                 AS8085 ASSEMBLER
  3666.  
  3667.  
  3668.  
  3669.  
  3670.  
  3671.         G.1  8085 REGISTER SET 
  3672.  
  3673.         The  following  is  a  list  of  the 8080/8085 registers used by
  3674.         AS8085:  
  3675.  
  3676.                 a,b,c,d,e,h,l   -       8-bit accumulators
  3677.                 m               -       memory through (hl)
  3678.                 sp              -       stack pointer
  3679.                 psw             -       status word
  3680.  
  3681.  
  3682.         G.2  8085 INSTRUCTION SET 
  3683.  
  3684.  
  3685.            The  following tables list all 8080/8085 mnemonics recognized
  3686.         by the AS8085  assembler.   The  following  list  specifies  the
  3687.         format for each addressing mode supported by AS8085:  
  3688.  
  3689.                 #data           immediate data
  3690.                                 byte or word data
  3691.         
  3692.                 r,r1,r2         register or register pair
  3693.                                 psw,a,b,c,d,e,h,l
  3694.                                 bc,de,hl,sp,pc
  3695.         
  3696.                 m               memory address using (hl)
  3697.         
  3698.                 addr            direct memory addressing
  3699.         
  3700.                 label           call or jump label
  3701.  
  3702.         The terms data, m, addr, and label may be expressions.  
  3703.  
  3704.            Note  that  not all addressing modes are valid with every in-
  3705.         struction, refer to  the  8080/8085  technical  data  for  valid
  3706.         modes.  
  3707.  
  3708.  
  3709.         AS8085 ASSEMBLER                                        PAGE G-2
  3710.         8085 INSTRUCTION SET
  3711.  
  3712.  
  3713.         G.2.1  Inherent Instructions 
  3714.  
  3715.                 cma             cmc
  3716.                 daa             di
  3717.                 ei              hlt
  3718.                 nop             pchl
  3719.                 ral             rar
  3720.                 ret             rim
  3721.                 rrc             rlc
  3722.                 sim             sphl
  3723.                 stc             xchg
  3724.                 xthl
  3725.  
  3726.  
  3727.         G.2.2  Register/Memory/Immediate Instructions 
  3728.  
  3729.                 adc     r       adc     m       aci     #data
  3730.                 add     r       add     m       adi     #data
  3731.                 ana     r       ana     m       ani     #data
  3732.                 cmp     r       cmp     m       cpi     #data
  3733.                 ora     r       ora     m       ori     #data
  3734.                 sbb     r       sbb     m       sbi     #data
  3735.                 sub     r       sub     m       sui     #data
  3736.                 xra     r       xra     m       xri     #data
  3737.  
  3738.  
  3739.         G.2.3  Call and Return Instructions 
  3740.  
  3741.                 cc      label           rc
  3742.                 cm      label           rm
  3743.                 cnc     label           rnc
  3744.                 cnz     label           rnz
  3745.                 cp      label           rp
  3746.                 cpe     label           rpe
  3747.                 cpo     label           rpo
  3748.                 cz      label           rz
  3749.                 call    label
  3750.  
  3751.  
  3752.         G.2.4  Jump Instructions 
  3753.  
  3754.                 jc      label
  3755.                 jm      label
  3756.                 jnc     label
  3757.                 jnz     label
  3758.                 jp      label
  3759.                 jpe     label
  3760.                 jpo     label
  3761.                 jz      label
  3762.                 jmp     label
  3763.  
  3764.  
  3765.         AS8085 ASSEMBLER                                        PAGE G-3
  3766.         8085 INSTRUCTION SET
  3767.  
  3768.  
  3769.         G.2.5  Input/Output/Reset Instructions 
  3770.  
  3771.                 in      data
  3772.                 out     data
  3773.                 rst     data
  3774.  
  3775.  
  3776.         G.2.6  Move Instructions 
  3777.  
  3778.                 mov     r1,r2
  3779.                 mov     r,m
  3780.                 mov     m,r
  3781.         
  3782.                 mvi     r,#data
  3783.                 mvi     m,#data
  3784.  
  3785.  
  3786.         G.2.7  Other Instructions 
  3787.  
  3788.                 dcr     r               dcr     m
  3789.                 inr     r               inr     m
  3790.         
  3791.                 dad     r               dcx     r
  3792.                 inx     r               ldax    r
  3793.                 pop     r               push    r
  3794.                 stax    r
  3795.         
  3796.                 lda     addr            lhld    addr
  3797.                 shld    addr            sta     addr
  3798.         
  3799.                 lxi     r,#data
  3800.  
  3801.  
  3802.  
  3803.  
  3804.  
  3805.  
  3806.  
  3807.  
  3808.  
  3809.  
  3810.  
  3811.  
  3812.  
  3813.  
  3814.                                    APPENDIX H
  3815.  
  3816.                                  ASZ80 ASSEMBLER
  3817.  
  3818.  
  3819.  
  3820.  
  3821.  
  3822.         H.1  .hd64 DIRECTIVE 
  3823.  
  3824.         Format:  
  3825.  
  3826.                 .hd64 
  3827.  
  3828.         The  .hd64  directive enables processing of the HD64180 specific
  3829.         mnemonics not included in  the  Z80  instruction  set.   HD64180
  3830.         mnemonics  encountered  without  the  .hd64  directive  will  be
  3831.         flagged with an 'o' error.  
  3832.  
  3833.  
  3834.         H.2  Z80 REGISTER SET AND CONDITIONS 
  3835.  
  3836.  
  3837.            The following is a complete list of register designations and
  3838.         condition mnemonics:  
  3839.  
  3840.                 byte registers  -       a,b,c,d,e,h,l,i,r
  3841.                 register pairs  -       af,af',bc,de,hl
  3842.                 word registers  -       pc,sp,ix,iy
  3843.         
  3844.                 C -     carry bit set
  3845.                 M -     sign bit set
  3846.                 NC -    carry bit clear
  3847.                 NZ -    zero bit clear
  3848.                 P -     sign bit clear
  3849.                 PE -    parity even
  3850.                 PO -    parity odd
  3851.                 Z -     zero bit set
  3852.  
  3853.  
  3854.  
  3855.  
  3856.         ASZ80 ASSEMBLER                                         PAGE H-2
  3857.         Z80 INSTRUCTION SET
  3858.  
  3859.  
  3860.         H.3  Z80 INSTRUCTION SET 
  3861.  
  3862.  
  3863.            The  following  tables  list all Z80/HD64180 mnemonics recog-
  3864.         nized by the ASZ80 assembler.  The designation []  refers  to  a
  3865.         required addressing mode argument.  The following list specifies
  3866.         the format for each addressing mode supported by ASZ80:  
  3867.  
  3868.                 #data           immediate data
  3869.                                 byte or word data
  3870.         
  3871.                 n               byte value
  3872.         
  3873.                 rg              a byte register
  3874.                                 a,b,c,d,e,h,l
  3875.         
  3876.                 rp              a register pair
  3877.                                 bc,de,hl
  3878.         
  3879.                 (hl)            implied addressing or
  3880.                                 register indirect addressing
  3881.         
  3882.                 (label)         direct addressing
  3883.         
  3884.                 offset(ix)      indexed addressing with
  3885.                                 an offset
  3886.         
  3887.                 label           call/jmp/jr label
  3888.  
  3889.         The  terms  data,  dir,  offset, and ext may all be expressions.
  3890.         The terms dir and offset are not allowed to be  external  refer-
  3891.         ences.  
  3892.  
  3893.            Note  that  not all addressing modes are valid with every in-
  3894.         struction, refer to the Z80/HD64180  technical  data  for  valid
  3895.         modes.  
  3896.  
  3897.  
  3898.         ASZ80 ASSEMBLER                                         PAGE H-3
  3899.         Z80 INSTRUCTION SET
  3900.  
  3901.  
  3902.         H.3.1  Inherent Instructions 
  3903.  
  3904.                 ccf             cpd
  3905.                 cpdr            cpi
  3906.                 cpir            cpl
  3907.                 daa             di
  3908.                 ei              exx
  3909.                 halt            neg
  3910.                 nop             reti
  3911.                 retn            rla
  3912.                 rlca            rld
  3913.                 rra             rrca
  3914.                 rrd             scf
  3915.  
  3916.  
  3917.         H.3.2  Implicit Operand Instructions 
  3918.  
  3919.                 adc     a,[]            adc     []
  3920.                 add     a,[]            add     []
  3921.                 and     a,[]            and     []
  3922.                 cp      a,[]            cp      []
  3923.                 dec     a,[]            dec     []
  3924.                 inc     a,[]            inc     []
  3925.                 or      a,[]            or      []
  3926.                 rl      a,[]            rl      []
  3927.                 rlc     a,[]            rlc     []
  3928.                 rr      a,[]            rr      []
  3929.                 rrc     a,[]            rrc     []
  3930.                 sbc     a,[]            sbc     []
  3931.                 sla     a,[]            sla     []
  3932.                 sra     a,[]            sra     []
  3933.                 srl     a,[]            srl     []
  3934.                 sub     a,[]            sub     []
  3935.                 xor     a,[]            xor     []
  3936.  
  3937.  
  3938.         ASZ80 ASSEMBLER                                         PAGE H-4
  3939.         Z80 INSTRUCTION SET
  3940.  
  3941.  
  3942.         H.3.3  Load Instruction 
  3943.  
  3944.                 ld      rg,[]           ld      [],rg
  3945.                 ld      (bc),a          ld      a,(bc)
  3946.                 ld      (de),a          ld      a,(de)
  3947.                 ld      (label),a       ld      a,(label)
  3948.                 ld      (label),rp      ld      rp,(label)
  3949.                 ld      i,a             ld      r,a
  3950.                 ld      a,i             ld      a,r
  3951.                 ld      sp,hl           ld      sp,ix
  3952.                 ld      sp,iy           ld      rp,#data
  3953.         
  3954.                 ldd                     lddr
  3955.                 ldi                     ldir
  3956.  
  3957.  
  3958.         H.3.4  Call/Return Instructions 
  3959.  
  3960.                 call    C,label         ret     C
  3961.                 call    M,label         ret     M
  3962.                 call    NC,label        ret     NC
  3963.                 call    NZ,label        ret     NZ
  3964.                 call    P,label         ret     P
  3965.                 call    PE,label        ret     PE
  3966.                 call    PO,label        ret     PO
  3967.                 call    Z,label         ret     Z
  3968.                 call    label           ret
  3969.  
  3970.  
  3971.         H.3.5  Jump and Jump to Subroutine Instructions 
  3972.  
  3973.                 jp      C,label         jp      M,label
  3974.                 jp      NC,label        jp      NZ,label
  3975.                 jp      P,label         jp      PE,label
  3976.                 jp      PO,label        jp      Z,label
  3977.         
  3978.                 jp      (hl)            jp      (ix)
  3979.                 jp      (iy)            jp      label
  3980.         
  3981.                 djnz    label
  3982.         
  3983.                 jr      C,label         jr      NC,label
  3984.                 jr      NZ,label        jr      Z,label
  3985.                 jr      label
  3986.  
  3987.  
  3988.         ASZ80 ASSEMBLER                                         PAGE H-5
  3989.         Z80 INSTRUCTION SET
  3990.  
  3991.  
  3992.         H.3.6  Bit Manipulation Instructions 
  3993.  
  3994.                 bit     n,[]
  3995.                 res     n,[]
  3996.                 set     n,[]
  3997.  
  3998.  
  3999.         H.3.7  Interrupt Mode and Reset Instructions 
  4000.  
  4001.                 im      n
  4002.                 im      n
  4003.                 im      n
  4004.                 rst     n
  4005.  
  4006.  
  4007.         H.3.8  Input and Output Instructions 
  4008.  
  4009.                 in      a,(n)           in      rg,(c)
  4010.                 ind                     indr
  4011.                 ini                     inir
  4012.         
  4013.                 out     (n),a           out     (c),rg
  4014.                 outd                    otdr
  4015.                 outi                    otir
  4016.  
  4017.  
  4018.         H.3.9  Register Pair Instructions 
  4019.  
  4020.                 add     hl,rp           add     ix,rp
  4021.                 add     iy,rp
  4022.         
  4023.                 adc     hl,rp           sbc     hl,rp
  4024.         
  4025.                 ex      (sp),hl         ex      (sp),ix
  4026.                 ex      (sp),iy
  4027.                 ex      de,hl
  4028.                 ex      af,af'
  4029.         
  4030.                 push    rp              pop     rp
  4031.  
  4032.  
  4033.         ASZ80 ASSEMBLER                                         PAGE H-6
  4034.         Z80 INSTRUCTION SET
  4035.  
  4036.  
  4037.         H.3.10  HD64180 Specific Instructions 
  4038.  
  4039.                 in0     rg,(n)
  4040.                 out0    (n),rg
  4041.         
  4042.                 otdm                    otdmr
  4043.                 otim                    otimr
  4044.         
  4045.                 mlt     bc              mlt     de
  4046.                 mlt     hl              mlt     sp
  4047.         
  4048.                 slp
  4049.         
  4050.                 tst     a
  4051.                 tstio   #data
  4052.